Skip to content

Instantly share code, notes, and snippets.

@teru01
Last active April 27, 2019 09:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teru01/ad140b594946eb8cf81fa81cf0d1d01c to your computer and use it in GitHub Desktop.
Save teru01/ad140b594946eb8cf81fa81cf0d1d01c to your computer and use it in GitHub Desktop.
Rustメモ

これなら問題ない

fn refe(addr: &String) {
    // addr.push('!');
    println!("{}", addr);    
}

fn main() {
    let mut v = "aa".to_string();
    let refs = &v;    
    v.push('!');
}

mainの最後でrefe()を呼ぶとエラーになる

fn main() {
    let mut v = "aa".to_string();
    let refs = &v;
    
    v.push('!');
    refe(refs);
}
cannot borrow `v` as mutable because it is also borrowed as immutable

これは可変参照は他の参照を同時に持てないから。ここではv.push()で可変参照が使われている。 そのあとに&vを再び利用しているためエラーになった。逆に、そのあと使わないならスコープは狭まり、v.push() の時にはもう共有参照は使われないと判断される。

Rustは{}内でさらに生存期間を考える事ができる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment