ある変数xの参照y = &xを用いて、(元のxを破棄しながら)xの所有権を得るにはどうすれば良いでしょうか?
例えば、以下のコードにおいて、変数fruitはfruitsが所有しているString型への参照となっていますが、これを関数の返り値としてmoveしようとすると、エラーが起こります。これはfruitsが"banana"の所有権を持っているためだと思うのですが、fruitsの"banana"の所有権を取得して返り値として返すにはどうすれば良いでしょうか?
この例ではfor fruit in fruitsとして、初めからfruitに所有権をmoveしてやれば良いですが、現在書いているコードではreturn直前まで所有権をmoveしたくないので、困っています。
rust
1fn main() { 2 println!("{:?}", get_banana()); 3} 4 5fn get_banana()->String{ 6 let fruits: Vec<String> = vec!["apple".to_string(), "banana".to_string(), "watermelon".to_string()]; 7 for fruit in &fruits{ //ここは変更したくない 8 if fruit == &"banana".to_string(){ 9 return *fruit; // error[E0507]: cannot move out of `*fruit` which is behind a shared reference 10 } 11 } 12 return "no banana".to_string(); 13}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/04 02:26