[解決済み] アポストロフィが1つ付いているラストタイプは何ですか?
質問
Rustでは、アポストロフィ1つで表記される型がいくつもあります。
'static
'r
'a
このアポストロフィの意味は何なのでしょうか?もしかしたら、参照の修飾語かもしれません(
&
)? リファレンスに特化した汎用的な型付け?これのドキュメントがどこに隠れているのか見当もつきません。
どのように解決するのですか?
Rustの名前付きライフタイムです。
引用元 Rust プログラミング言語 :
<ブロッククオートRustのすべての参照にはライフタイムがあり、その参照が有効であるスコープを表します。ほとんどの場合、型が推論されるのと同様に、ライフタイムは暗黙的に推論されます。複数の型が可能であるため型にアノテーションを付けなければならないのと同様に、参照の寿命はいくつかの異なる方法で関連付けられる場合があるため、Rust では、実行時に実際に使用される参照が確実に有効であることを確認できるように、一般的な寿命パラメータを使用して関係をアノテートする必要があります。
Lifetimeアノテーションは、関係する参照が生きている期間を変更するものではありません。 の寿命は変わりません。関数が任意の型を受け入れることができるのと同じ方法で が一般的な型パラメータを指定するとき、関数はどんな型でも受け入れることができます。 シグネチャが一般的なパラメータを指定している場合、関数はどのような寿命の参照でも受け入れることができます。 lifetimeパラメータを指定すると、関数は任意の有効期間を持つ参照を受け入れることができます。寿命アノテーションが行うのは、複数の参照の寿命を相互に関連付けることです。 複数の参照の有効期間を相互に関連付けることです。
ライフタイムアノテーションは少し変わった構文を持っています。 の名前はアポストロフィで始まらなければなりません。
'
. の名前は通常すべて小文字です。 の名前は通常すべて小文字で、ジェネリックタイプと同様です。 のように非常に短い名前になります。'a
という名前は、ほとんどの人が がデフォルトの名前です。Lifetimeパラメータのアノテーションは&
の後に記述します。 の後に置かれ、スペースが寿命アノテーションと を区切ります。
別の言い方をすれば、ライフタイムは、参照が指すデータが有効である実行期間を近似的に示します。Rust コンパイラは、安全のため、可能な限り短いライフタイムを保守的に推測します。 もし、ある参照が最短の推定値よりも長く生きていることをコンパイラに伝えたい場合は、例えば、出力参照が与えられた入力参照と同じ寿命を持つというように、名前を付けることができます。
は
'static
の寿命は特別な寿命で、すべての寿命の中で最も長く、プログラムの存続期間中です。 典型的な例は、プログラム/モジュールの寿命の間、常に利用可能である文字列の "リテラル"です。
より多くの情報を得るには このスライドデッキ で、スライド29あたりからご覧いただけます。
Rustにおけるライフタイム でもライフタイムについて詳しく説明しています。
関連
-
[解決済み] 構造体や配列を印刷するには?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】文字列をint型に変換する?
-
[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?
-
[解決済み】Rustで文字列を分割する方法は?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] アポストロフィが1つ付いているラストタイプは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み] usize` と `u32` の違いは何ですか?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み】ある値とその値への参照を同じ構造体に格納できないのはなぜですか?
-
[解決済み】Rustで文字列を分割する方法は?
-
[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み] Stringを&'static strに変換する方法