我是否必须为拥有的(易于使用的)和借用的(更有效的)数据结构创建不同的结构?
Do I have to create distinct structs for both owned (easy-to-use) and borrowed (more efficient) data structures?
我有一个 Message<'a>
,它在 大部分 短暂的缓冲区上有 &'a str
个引用。
这些引用要求特定的程序流程,因为它们保证永远不会超过缓冲区的生命周期 'a
。
现在我也想拥有一个 Message
的自有版本,这样它就可以四处移动,通过线程发送等
有没有惯用的方法来实现这个?我认为 Cow<'a, str>
可能会有所帮助,但不幸的是,Cow
不会神奇地分配,以防 &'a str
超过缓冲区的生命周期。
AFAIK,Cow
并不特别,因为无论 Cow
是否持有 Owned
变体,它仍然必须通过 'a
上的借用检查器。
std::borrow::Cow
.
的定义
pub enum Cow<'a, B> {
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}
是否有一种惯用的方法来拥有 Message
的自有变体?出于某种原因,我们有 &str
和 String
、&[u8]
和 Vec<u8>
,...这是否意味着人们通常会选择 &msg
和 Message
?
我想我仍然需要考虑是否真的需要一个自有变体,但我的经验表明,为自有变体设置一个逃生口通常可以提高原型制作速度。
是的,你需要有多种类型,一种代表拥有的概念,一种代表借用的概念。
您会在整个标准库和第三方包中看到相同的技术。
另请参阅:
我有一个 Message<'a>
,它在 大部分 短暂的缓冲区上有 &'a str
个引用。
这些引用要求特定的程序流程,因为它们保证永远不会超过缓冲区的生命周期 'a
。
现在我也想拥有一个 Message
的自有版本,这样它就可以四处移动,通过线程发送等
有没有惯用的方法来实现这个?我认为 Cow<'a, str>
可能会有所帮助,但不幸的是,Cow
不会神奇地分配,以防 &'a str
超过缓冲区的生命周期。
AFAIK,Cow
并不特别,因为无论 Cow
是否持有 Owned
变体,它仍然必须通过 'a
上的借用检查器。
std::borrow::Cow
.
pub enum Cow<'a, B> {
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}
是否有一种惯用的方法来拥有 Message
的自有变体?出于某种原因,我们有 &str
和 String
、&[u8]
和 Vec<u8>
,...这是否意味着人们通常会选择 &msg
和 Message
?
我想我仍然需要考虑是否真的需要一个自有变体,但我的经验表明,为自有变体设置一个逃生口通常可以提高原型制作速度。
是的,你需要有多种类型,一种代表拥有的概念,一种代表借用的概念。
您会在整个标准库和第三方包中看到相同的技术。
另请参阅: