以下だと、Testの get_name ではエラーになるけど、 Test2のget_age はエラーにならない。
cannot move out of
self.name
which is behind a shared reference move occurs becauseself.name
has typeString
, which does not implement theCopy
trait
struct Test { name: String } impl Test { fn get_name(&self) -> String{ return self.name; } } struct Test2 { age: i32 } impl Test2 { fn get_age(&self) -> i32 { // これは勝手に Copy されたということ? return self.age; } } fn main() { let test = Test{ name: "akira".to_string() }; }
self.name は共有参照なので、所有権を動かせない、と出ている。 こういう場合は Copy trait が実装されている型なら return 時にCopyされるらしい。 実際、i32 の方は Copy されるから問題ないみたいだ。
そこはいいとして、 &self が共有参照というのがよくわからんな・・。明日もう少し調べよう。
いつ、引数で渡せるのか、渡せなくなるのか。 関数で渡した変数は、変更されるのかされないのか。