Rust 文档中的“克隆仅适用于从 &T 到 T”是什么意思?

Ива*_*хин 3 rust

https://doc.rust-lang.org/std/borrow/trait.ToOwned.html

这是什么意思?

但克隆仅适用于从 &T 到 T。

您能解释一下并举个例子吗?

Cha*_*man 5

Clone是从共享引用到拥有版本的方法。考虑例如Rc<Rc as Clone>::clone()获取&Rc并产生Rc.

现在假设您想要 impl Clonefor str。该clone()方法需要 take&str和 return str。但你不能return str,因为它没有大小 - 编译器不知道要节省多少内存。

相反,它需要返回String的拥有版本str。但它不能使用Clone,因为Clone将返回类型硬编码为等于输入类型。

这就是空白的ToOwned填补。对于共享版本和拥有版本不是同一类型的情况,它提供了一种从共享版本转到拥有版本的方法。

ToOwned因此是一个超集Clone(事实上,每种类型的实现也通过这个总体实现Clone来实现)。ToOwned