rust 在变量中保存&str或String

ffdz8vbo  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(117)

假设我定义了一个带有字符串字段的结构体。该字段应:
1.能够持有字符串所有权(例如,当我想用生成的值format填充它时),
1.也可以保存一个不可变的引用(在字符串已经被其他地方拥有的情况下,我不想浪费时间克隆它)。
在Rust中我该如何表达(“&strString”)?

3pvhb19x

3pvhb19x1#

有一个内置类型std::borrow::CowCloneOnWrite的缩写)。通过指定Cow<'a, str>,可以存储&'a strStringCow derefs到str,因此您可以调用str方法,并在需要调用String方法时提供to_mut()into_owned()方法。

jei2mxaa

jei2mxaa2#

std::borrow::Cow类型对于您的用例来说已经足够了,正如另一个答案中所建议的那样。如果你想要一些带有额外约束的自定义类型,你可以尝试定义你自己的枚举,如下所示。
在Rust中,可以使用枚举来表示可以保存String或& str的字段。枚举允许您定义一个可以有多个变量的类型,每个变量都有自己的数据。

enum MyString {
  Owned(String),
  Borrowed(&'static str),
}

struct MyStruct {
  field: MyString,
}

字符串
在上面的例子中,MyString枚举有两个变体:Owned,它保存一个String并表示所拥有的字符串所有权; Borrowed,它保存一个&str并表示对字符串的不可变引用。
然后,您可以使用MyStruct结构体,并根据需要使用String或&str填充字段。

相关问题