参照(reference)とは
前章では、関数に値を渡すと所有権が移動してしまうことを見ました。所有権を渡さずに値を一時的に使わせてもらう仕組みが「参照(reference)」です。参照を使うことを「借用(borrowing)」と呼びます。
fn calculate_length(s: &String) -> usize {
s.len()
} // sはただの参照なので、ここで何かが破棄されることはない
fn main() {
let s1 = String::from("hello");
let len = calculate_length(&s1);
println!("'{}'の長さは{}です", s1, len); // s1はまだ使える
}
&s1のように&を付けて渡すと、所有権を渡さずに値への参照を渡すことができます。関数の引数の型も&Stringのように&を付けます。
可変な参照(&mut)
参照先の値を変更したい場合は、&mutを使います。
fn add_world(s: &mut String) {
s.push_str(", world");
}
fn main() {
let mut s = String::from("hello");
add_world(&mut s);
println!("{}", s); // hello, world
}
借用のルール
Rustの借用には、以下のルールがあります。
- ある値に対して、不変な参照(
&)はいくつでも同時に存在できる。 - ただし、可変な参照(
&mut)は同時に1つしか存在できない。 - 不変な参照と可変な参照を同時に存在させることはできない。
演習:Vecの合計を借用で求める
コード提出フォーム
RUST安全なサーバー側採点連携が未接続のため、現在は提出できません。
採点基盤準備中
公開テストケース
読み込み中…