すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

Rust の変数 - 有効範囲や所有権

前回

nihonium.hatenablog.com

スコープはブロック内で有効

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);
}

クローンすることで、前の変数の所有権が消滅しない。

次回

nihonium.hatenablog.com