Rust の変数 - 有効範囲や所有権
前回
スコープはブロック内で有効
fn main(){ { let str = "Hello, world!"; //ここから str が有効 println!("{}", str); // str はここまで有効 } }
数値や文字、真偽値の変数 = 変数
はコピー
fn main(){ let x = 5; let y = x; println!("x = {:p}, y = {:p}", &x, &y); }
値は同じでも違うアドレスに存在する。
所有権は 1 つ
fn main(){ let foo = String::from("Hello"); let bar = foo; println!("bar = {}", bar); }
所有権はデーターを持つ権利のようなもの。
所有権を持つ所有者(=変数)は1つだけ。
let bar = foo;
としたとき、foo
は無効になる。
コピーはクローンで
fn main(){ let foo = String::from("Hello"); let bar = foo.clone(); println!("foo = {}, bar = {}", foo, bar); }
クローンすることで、前の変数の所有権が消滅しない。