Rustのライフタイムですが、関数の場合は参照の戻り値がどの引数とライフタイムが同じか指定するんだと思いますが、構造体のメンバのライフタイムって構造体と同じと指定する以外に指定って出来るんですか?
-
-
Replying to @_marony
構造体のメンバに参照を持つ例です: https://wandbox.org/permlink/IRcHOJNTU4zDlNT7 …
1 reply 0 retweets 0 likes -
Replying to @ubnt_intrepid
ありがとうございます 構造体の場合、このパターンしかなくないですか?メンバは必ず構造体より長いライフタイムを持つので必ず構造体に指定したライフタイムと同じものを指定する あー、implが出てくると、関数の戻り値が構造体のライフタイムなのか引数のライフタイムなのか変わりますね
1 reply 0 retweets 0 likes -
Replying to @_marony
質問の内容をよく読まずに誤解してしまっていたのですが,「メンバ関数で構造体のメンバへの参照を返すとき,その参照のライフタイムは構造体自身のもの(&'a self で省略されているもの)以外を指定可能か?」ということで問題ないでしょうか?
1 reply 0 retweets 0 likes -
Replying to @ubnt_intrepid @_marony
参照のライフタイムを変更する例です。当然ですが参照のライフタイムは構造体自身のものよりも短くなる(?)必要があるので,そう推論できるよう制約を付ける必要がありました。 https://is.gd/ZeEYuw
2 replies 0 retweets 2 likes -
Replying to @ubnt_intrepid
遅くなりました。 <'b, 'a: 'b> という指定を初めて見ました。 が、これはライフタイムは1つしか必要ないように思えます。戻り値のライフタイムは引数のselfと同じで良くないでしょうか
1 reply 0 retweets 0 likes -
Replying to @_marony
この例はメソッドで返す参照のライフタイムを無理やり変更しようとした結果できたもので,おっしゃる通り普通に書く分には &self と同じもので十分だと思います(続く)
1 reply 0 retweets 0 likes -
Replying to @ubnt_intrepid @_marony
'b をなくした場合(すなわちlifetimeを1つにした場合)メソッドのシグネチャは fn foo<'a>(&'a self) -> &'a i32; となりますが,これはライフタイムの省略ルールにより fn foo(&self) -> &i32; と等価になります。
1 reply 0 retweets 0 likes -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.