gpt4 book ai didi

rust - Option<&T> 如何实现复制

转载 作者:行者123 更新时间:2023-12-03 07:53:12 24 4
gpt4 key购买 nike

我注意到 Option<&T> 和 Option 的映射函数有些奇怪,经过快速谷歌搜索后,还有其他人注意到了同样的问题,如中所述 this question 。我将仅使用相同的示例。

let greet: Option<String> = Some("hi".to_string());

let mapped = greet.map(|e|e);

dbg!(mapped);
dbg!(greet);

错误消息是:

use of moved value: `greet` ....

另一方面,下面的代码是可以的。

let greet: Option<String> = Some("hi".to_string());

let mapped = greet.as_ref().map(|e|e);

dbg!(mapped);
dbg!(greet);

map 函数的类型是:

pub const fn map<U, F>(self, f: F) -> Option<U>

所以调用者的所有权应该转移到map中的“self”,并且解释来自question是“选项<&T>实现复制”。

因此,Option 转移所有权从而导致错误,而 Option<&T> 只是创建一个新副本。

但是,我找不到任何显示“Option<&T> Implements Copy”的地方,更糟糕的是,来自document :

/// The `Option` type. See [the module level documentation](self) for more.
#[derive(Copy, PartialOrd, Eq, Ord, Debug, Hash)]
#[rustc_diagnostic_item = "Option"]
#[cfg_attr(not(bootstrap), lang = "Option")]
#[stable(feature = "rust1", since = "1.0.0")]
pub enum Option<T> {
/// No value.
#[lang = "None"]
#[stable(feature = "rust1", since = "1.0.0")]
None,
/// Some value of type `T`.
#[lang = "Some"]
#[stable(feature = "rust1", since = "1.0.0")]
Some(#[stable(feature = "rust1", since = "1.0.0")] T),
}

看起来像是 Option 派生的 Copy 特征,所以第一个示例应该没问题。

我是否错过了模块级文档中的任何内容?

最佳答案

使用#[derive(Copy)]包括 T: Copy约束。意思是Option<T>仅实现 Copy如果T实现Copy .

关于rust - Option<&T> 如何实现复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76643730/

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