ある変数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