2つのライフタイムを使用した場合の上記のコードの利点は何ですか?上記のコードがうまくいく状況はありますか?しかし、2つの生存期間はありませんか?複数の引数に同じ有効期間を使用する利点は何ですか?
1
A
答えて
2
実際の使用状況によって異なります。戻り値だけではないy
1に、x
引数に依存しているため、唯一の生存期間を使用することが欠点である。ここ
fn xory<'a>(x: &'a str, y: &'a str) -> &'a str {
x
}
:あなたが書いた正確なコードが与えられました。のは、このユーザーコードを想像してみましょう:out
は基本的にx_in
あるので、私たちは、これが正常に動作することを期待する
let x_in = "paul".to_owned();
let out = {
let y_in = "peter".to_owned();
xory(&x_in, &y_in)
};
。コンパイラは文句しかし:
<anon>:12:22: 12:26 error: `y_in` does not live long enough
<anon>:12 xory(&x_in, &y_in)
^~~~
<anon>:13:7: 14:2 note: reference must be valid for the block suffix following statement 1 at 13:6...
<anon>:13 };
<anon>:14 }
<anon>:11:39: 13:6 note: ...but borrowed value is only valid for the block suffix following statement 0 at 11:38
<anon>:11 let y_in = "peter".to_owned();
<anon>:12 xory(&x_in, &y_in)
<anon>:13 };
コンパイラがxory
参照両方の引数から出力することを(xory
署名から)を前提とするためです。したがって、パラメーター間の不必要な条件/前提条件/関係を避けるために、可能な限り詳細にライフタイムを指定する方が良い場合がよくあります。
:あなたには、いくつかの条件に応じて、x
またはy
のいずれかを返すようにしたいとします
fn xory<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() == 42 {
x
} else {
y
}
}
ここでの寿命出力は両方の引数の存続時間に依存する可能性があり、コンパイル時にどちらの引数が出るかはわかりません。それゆえ、私たちは最悪の状況に備えてこれを好きにしなければなりません。
1
戻り値がx
またはy
のいずれかから借用できると言っているので、関数本体の観点から見ると、より柔軟です。 呼び出し元からはx
とy
の両方が結果が保持される限り有効である必要があるため、より制限的です(ちょうどx
ではなく)。
関連する問題
- 1. ゲームで複数のポートを使用する利点は何ですか?
- 2. 同じフォームで複数のTinyMCEを有効にする方法
- 3. Node.jsの複数のイベントリスナーを同じイベントにバインドする利点は何ですか
- 4. 複数のコンピュータ間で同じコードブロックファイルを同期する
- 5. Python 3を使用する利点/利点は何ですか?
- 6. 名前空間を使用する利点は何ですか?
- 7. 有効な[] .forEach.call関数の引数は何ですか?
- 8. 定数変数の有効期間は?
- 9. 複数のプロジェクト間で同じhibernateマッピングファイルを使用する
- 10. 複数のスキーマを使用する利点は?
- 11. プロキシキャッチサーバーを使用する利点と欠点は何ですか?
- 12. 同じ引数を持つ同じメソッドへの複数の呼び出しでMockitoを使用する
- 13. 変数宣言でvarを使用する利点は何ですか?
- 14. オブジェクトを関数型プログラミング言語で使用する利点は何ですか?
- 15. PHPで匿名関数を使用する利点は何ですか?
- 16. vbaでのフォームの有効期間中利用可能な変数
- 17. 同じコマンドライン引数に複数のパラメータを渡す方法は?
- 18. 使用する利点何
- 19. 複数のスレッドにわたって単一のio_serviceを使用する利点は何ですか?
- 20. Linuxデバイスドライバ:同じドライバを使用する複数のデバイス間で共有されるコードですか?
- 21. 異なるサービス引数を持つ複数のエンティティに同じEntityListenerを使用
- 22. 同期ブロック上にアトミックを書き込むためにUnsafeクラスを使用する利点は何ですか?
- 23. 複数の固有フィールドに同じ外部キーを使用
- 24. Haskell - 同じファイルで複数のモジュールを使用するには?
- 25. HTTPリクエストで非同期パイプを使用する利点
- 26. Cで変数 "extern"の有効期間はありますか?
- 27. 定数と変数を定数で比較する利点は何ですか?
- 28. 囲まれたループ変数の有効期間と有効期間はどのくらいですか?
- 29. 複数のスプレッドシート間で同じGoogleフォームを共有
- 30. sweetalert2複数のswalを同じ関数で使用する
ああ、両方の入力に依存する場合、出力は統一する必要があります。 – Snark