[解決済み] Stringを&'static strに変換する方法
質問
を変換するにはどうすればよいのでしょうか?
String
を
&str
? 具体的には、これを
str
と
static
の寿命 (
&'static str
).
どのように解決するのですか?
Rust 1.0用に更新しました。
を取得することはできません。
&'static str
から
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
モジュールになります。
関連
-
[解決済み] Rustにはキューとスタックコレクションがありますか?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] 文字列を追加して印刷するにはどうすればよいですか?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】文字列をint型に変換する?
-
[解決済み】Rustで文字列を分割する方法は?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] バイトのベクター(u8)を文字列に変換するには?
-
[解決済み] ローカルの未公開クレートを使うには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 構造体のフィールドをメソッドから変異させるには?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] 文字列を追加して印刷するにはどうすればよいですか?
-
[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?
-
[解決済み】Rustで文字列を分割する方法は?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?
-
[解決済み] バイトのベクター(u8)を文字列に変換するには?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み] ローカルの未公開クレートを使うには?