Rust:如何使用字符串成员创建结构体?

如何使用字符串成员创建结构体?会员应该由struct对象拥有。我刚刚生锈,对于简单的问题抱歉,但我无法找到一个例子。有一些过时的例子,使用“〜”,似乎不推荐使用…
我正在寻找正确的结构声明,然后实例化的例子。
如果字符串必须由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);
}

如果字符串的生命周期未知,那么您可以一生参数化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);
}

请注意,奶牛类型在一生中参数化。寿命是指借用的字符串的寿命(即当它是借用的)。如果你有一只母牛,那么你可以使用借位并获得一个str,通过它可以进行正常的字符串操作,而不必担心是否分配一个新的字符串。 (通常,由于deref不需要显式调用借款,也就是说,Cow值将自动从它们的借用形式中退出,因此,val具有类型为Cow<'a,str>将产生& str。 )

〜语法确实已被弃用。 〜str的替换是String,您可以将其视为字符串缓冲区(即字符串的内容可修改,并且可扩展)。 A& str是不可更改的字符串的不可变视图,不能在安全代码中更改。

http://stackoverflow.com/questions/25754863/rust-how-to-create-struct-with-string-members

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Rust:如何使用字符串成员创建结构体?