文字列を &'static str に変換する方法 質問する

文字列を &'static str に変換する方法 質問する

Stringを に変換するにはどうすればよいですか? 具体的には、有効期間が ( )&strの に変換したいと思います。strstatic&'static str

ベストアンサー1

Rust 1.0 に更新

s はプログラムの存続期間中存続するわけではないため、 &'static stra から取得することはできません。これが存続期間の意味です。そこから取得できるのは、自身の存続期間によってパラメータ化されたスライスだけです。StringString&'staticString

からStringスライスに移動するには&'a str、スライス構文を使用できます。

let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..];  // take a full slice of the string

Stringあるいは、が実装しているという事実を利用してDeref<Target=str>、明示的な再借用を実行することもできます。

let s_slice: &str = &*s;  // s  : String 
                          // *s : str (via Deref<Target=str>)
                          // &*s: &str

さらに簡潔な構文を可能にする別の方法もありますが、これはコンパイラが目的のターゲット型を決定できる場合にのみ使用できます(たとえば、関数の引数や明示的に型指定された変数のバインディングなど)。これは参照強制解除また、&演算子のみを使用することができ、コンパイラは*コンテキストに基づいて適切な数の を自動的に挿入します。

let s_slice: &str = &s;  // okay

fn take_name(name: &str) { ... }
take_name(&s);           // okay as well

let not_correct = &s;    // this will give &String, not &str,
                         // because the compiler does not know
                         // that you want a &str

Stringこのパターンは/に対して一意ではないことに注意してください。たとえば、/と/のように&str、 を介して接続されたすべての型のペアで使用できます。DerefCStringCStrOsStringOsStrstd::ffiモジュールまたはPathBuf/Pathからstd::pathモジュール。

おすすめ記事