如何使用字符串成员创建结构?成员应该由struct对象拥有.我刚刚生锈,对不起简单的问题,但我找不到一个例子.有一些过时的例子使用"〜"似乎已被弃用...我正在寻找正确的struct声明然后实例化示例.
Bur*_*hi5 82
如果字符串必须由struct拥有,那么你应该使用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);
}
Run Code Online (Sandbox Code Playgroud)
如果字符串的生命周期未知,那么您可以Foo使用生命周期进行参数化:
struct Foo<'a> {
baz: &'a str,
}
Run Code Online (Sandbox Code Playgroud)
如果您不确定该字符串是否拥有(对于避免分配有用),那么您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,该Cow类型是在整个生命周期中参数化的.生命周期是指借来的字符串的生命周期(即,它是a Borrowed).如果你有Cow,那么你可以使用borrow并获得一个&'a str,你可以用它来做正常的字符串操作,而不用担心是否分配新的字符串.(典型地,显式调用borrow不是必须的,因为DEREF的.即,Cow值将自动DEREF其借形式.因此,&*val其中val已键入Cow<'a, str>会产生&str).
该String语法确实过时了.替换为&stris Foo,您可以将其视为字符串缓冲区(即,字符串的内容是可修改的并且可以增长).A borrow::Cow是字符串的不可变视图,无法在安全代码中更改.
| 归档时间: |
|
| 查看次数: |
20039 次 |
| 最近记录: |