これなら問題ない
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は{}内でさらに生存期間を考える事ができる