gpt4 book ai didi

rust - 我是否必须为拥有(易于使用)和借用(更高效)的数据结构创建不同的结构?

转载 作者:行者123 更新时间:2023-12-03 11:42:00 25 4
gpt4 key购买 nike

我有一个 Message<'a>其中有 &'a str在一个主要是短暂的缓冲区上的引用。
这些引用要求特定的程序流程,因为它们保证永远不会超过生命周期'a的缓冲区。

现在我也想拥有 Message 的自有版本,以便它可以移动,通过线程发送等。

有没有一种惯用的方法来实现这一目标?我以为 Cow<'a, str>可能有帮助,但不幸的是,Cow&'a str 的情况下不会神奇地分配将超过缓冲区的生命周期。

阿法克,Cow并不特殊,无论 Cow持有 Owned变体,它仍然必须通过 'a 上的借用检查器.
std::borrow::Cow 的定义.

pub enum Cow<'a, B> {
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}

是否有一种惯用的方式来拥有 Message 的自有变体? ?出于某种原因,我们有 &strString , &[u8]Vec<u8> , ... 这是否意味着人们通常会选择 &msgMessage ?

我想我仍然需要考虑是否真的需要自有变体,但我的经验表明,为自有变体设置逃生舱通常会提高原型(prototype)制作速度。

最佳答案

是的,您需要有多种类型,一种代表拥有的概念,一种代表借用的概念。

您将在整个标准库和第三方 crate 中看到相同的技术。

也可以看看:

  • How to abstract over a reference to a value or a value itself?
  • How to avoid writing duplicate accessor functions for mutable and immutable references in Rust?
  • 关于rust - 我是否必须为拥有(易于使用)和借用(更高效)的数据结构创建不同的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934918/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com