String
を に変換するにはどうすればよいですか? 具体的には、有効期間が ( )&str
の に変換したいと思います。str
static
&'static str
ベストアンサー1
Rust 1.0 に更新
s はプログラムの存続期間中存続するわけではないため、 &'static str
a から取得することはできません。これが存続期間の意味です。そこから取得できるのは、自身の存続期間によってパラメータ化されたスライスだけです。String
String
&'static
String
から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
、 を介して接続されたすべての型のペアで使用できます。Deref
CString
CStr
OsString
OsStr
std::ffi
モジュールまたはPathBuf
/Path
からstd::path
モジュール。