我注意到 Option<&T> 和 Option
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> 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
我是否错过了模块级文档中的任何内容?
最佳答案
使用#[derive(Copy)]
包括 T: Copy
约束。意思是Option<T>
仅实现 Copy
如果T
实现Copy
.
关于rust - Option<&T> 如何实现复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76643730/