当T没有实现Clone时,为什么不能为通用Option<T>克隆None?

给定一个具有泛型的结构,Option<T>其中T可能无法实现Clone为什么不能None被克隆?aNone的类型T和其他的不一样None吗?例如:

struct Foo<T> {
    bar: Vec<Option<T>>,
}

impl <T> Foo<T> {
    fn blank(size: usize) -> Foo<T> {
        Foo {
            bar: vec![None; size],
        }
    }
}

回答

由于其他答案正确地指出了 ouf,这是由于vec!-macro 的实现方式。您可以手动创建Vec的任何Option<T>不要求TClone

let bar = std::iter::repeat_with(|| Option::<T>::None).take(size).collect::<Vec<_>>();

这将创建size-number ofOption::<T>::None并将它们放在 a 中Vec,该 a 将预先分配到适当的大小。这适用于任何T.


以上是当T没有实现Clone时,为什么不能为通用Option&lt;T&gt;克隆None?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>