gpt4 book ai didi

string - 如何创建具有字符串成员的 Rust 结构?

转载 作者:行者123 更新时间:2023-11-29 07:40:14 25 4
gpt4 key购买 nike

我希望成员归结构所有。我正在寻找结构和实例化示例的正确声明。我找不到示例。

最佳答案

如果字符串必须归结构所有,那么你应该使用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 字符串的生命周期(即,当它是 Borrowed 时)。如果你有 Cow , 那么你可以使用 borrow得到 &'a str ,您可以使用它进行正常的字符串操作,而不必担心是否分配新字符串。通常,显式调用 borrow不需要因为取消引用强制。即 Cow values 将自动解除对借用形式的引用,因此 &*val其中 val类型为 Cow<'a, str>将产生 &str .

关于string - 如何创建具有字符串成员的 Rust 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com