【问题标题】:What is the difference between to_owned() and clone() in this context?在这种情况下,to_owned() 和 clone() 有什么区别?
【发布时间】:2021-08-11 02:51:44
【问题描述】:
pub fn set(&mut self, key: String, value: String) -> Result<()> {
    let cmd = Command::Set {
        key: key.clone(),
        value: value.to_owned(),
    };
    serde_json::to_writer(&mut self.writer, &cmd)?;
    self.writer.flush()?;
    self.map.insert(key, value);
    Ok(())
}

在这个函数中,我可以使用.clone()to_owned() 从我的2 个函数参数Stringkeyvalue 创建该结构。有什么区别,哪种情况更适合这种情况?

【问题讨论】:

标签: rust


【解决方案1】:

ToOwned trait 的文档中解释了区别:

某些类型可以从借用变为拥有,通常通过 实现 Clone 特征。

Clone 仅适用于从&amp;TTToOwned 特征 泛化克隆以从给定的任何借用中构造拥有的数据 输入。

但是,在您的特定情况下,鉴于您构建 cmd 的全部目的是将对它的引用传递给 serde_json::to_writer(&amp;mut self.writer, &amp;cmd)?;,您可能希望将结构的字段修改为只是对类型的引用,一些像这样:

struct Cmd<'s> {
    key: &'s str,
    value: &'s str,
}

这将避免你必须克隆任何东西。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2022-01-03
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多