[解決済み] 文字列を含むRust構造体を作成するには?
2023-01-13 16:52:11
質問
メンバを構造体で所有させたい。素朴な質問で申し訳ないのですが、例が見つかりませんでした。構造体の正しい宣言とインスタンス化の例を探しています。
どのように解決するのですか?
文字列を構造体で所有する必要がある場合は
String
. あるいは
&str
を静的な寿命(つまり、プログラムの寿命)で指定することもできます。例えば
struct Foo {
bar: String,
baz: &'static str,
}
fn main() {
let foo = Foo {
bar: "bar".to_string(),
baz: "baz",
};
println!("{}, {}", foo.bar, foo.baz);
}
文字列の寿命が不明な場合は、パラメータで
Foo
にライフタイムを指定します。
struct Foo<'a> {
baz: &'a str,
}
も参照してください。
文字列が所有されるかどうかがわからない場合(アロケーションを回避するのに便利)には
borrow::Cow
:
use std::borrow::Cow;
struct Foo<'a> {
baz: Cow<'a, str>,
}
fn main() {
let foo1 = Foo {
baz: Cow::Borrowed("baz"),
};
let foo2 = Foo {
baz: Cow::Owned("baz".to_string()),
};
println!("{}, {}", foo1.baz, foo2.baz);
}
なお
Cow
型はライフタイムでパラメータ化されることに注意してください。このライフタイムとは
借りた
の文字列の寿命です(つまり、それが
Borrowed
). もし、あなたが
Cow
であれば
borrow
を取得し
&'a str
を得れば、新しい文字列を割り当てるかどうかを気にすることなく、 通常の文字列操作ができるようになります。一般に、明示的に
borrow
を明示的に呼び出すことは必要ありません。すなわち
Cow
の値は自動的に借用されたフォームにデリファレンスされるので
&*val
ここで
val
はタイプ
Cow<'a, str>
を生成します。
&str
.
関連
-
[解決済み】動的構造体参照の引数は、有効なフィールド名で評価する必要がある
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Go StartsWith(str 文字列)
-
[解決済み] 2つの文字列を連結して、同じ構造体のキーに格納するにはどうすればよいですか?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み】Goで一定の長さのランダムな文字列を生成するには?
-
[解決済み】文字列から最後の文字を削除する。Swift言語
-
[解決済み] Golangの文字列のインデックスを作成するには?
-
[解決済み] 文字列の先頭文字の取得と削除
-
[解決済み] 文字列を変数名に変換する
-
[解決済み] 複数行の文字列をカンマで区切られた1つの文字列に変換する
-
[解決済み] なぜRustでは文字列の最初の文字を大文字にするのが複雑なのですか?