簡體   English   中英

如何使用字符串成員創建Rust結構?

[英]How to create a Rust struct with string members?

我希望成員歸結構所有。 很抱歉這個簡單的問題,但我無法找到一個例子。 我正在尋找結構和實例化示例的正確聲明。

如果字符串必須由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);
}

請注意, Cow類型在整個生命周期中進行參數化。 生命周期是指借來的字符串的生命周期(即,當它是Borrowed )。 如果你有一個Cow ,那么你可以使用borrow並獲得一個&'a str ,你可以用它來進行正常的字符串操作,而不必擔心是否分配新的字符串。 通常,由於deref強制,不需要明確調用borrow 也就是說, Cow值將自動取消引用它們的借用形式,因此&*val其中val具有類型Cow<'a, str>將產生&str

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM