我希望成员归该结构所有。很抱歉这个简单的问题,但是我找不到一个例子。我正在寻找结构和实例化示例的正确声明。
Answers:
如果字符串必须由该结构拥有,则应使用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类型是在整个生命周期中进行参数化的。生命周期是指借用字符串的生命周期(即a Borrowed)。如果您有一个Cow,那么您可以使用borrow和获取一个&'a str,通过它您可以执行常规的字符串操作,而不必担心是否分配新的字符串。通常,borrow由于取消引用强制,因此不需要显式调用。即,Cow值将自动解除引用其借形式,所以&*val在那里val已类型Cow<'a, str>会产生&str。
String是可变的。如果我有一个结构,例如,一个name应该是不可变的字段,我还是应该使用String而不是str?
String并注意,通过Stringfrom创建一个涉及到堆分配+复制整个字符串。&str.to_string()