原语应像往常一样按值传递,并且应克隆通过引用传递的任何内容('借用') . 就像是:
let a = 7; let b = duplicate(a); // let b = a; let a = struct{}{}; let b = duplicate(a); // let b = a.clone();
这假设Rust中的每个值都实现 Clone 或 Copy 特征 . 这个假设是真的吗?如果没有,是否可以定义 Duplicate 的特征 Duplicate ?
Clone
Copy
Duplicate
这假设Rust中的每个值都实现了克隆或复制特征 . 这个假设是真的吗?
没有 .
是否可以定义特征重复
是的,但它似乎没有提供超出现有 Clone 特性的任何 Value .
您可能希望了解有关所有权的更多信息,因为您可以在不进行任何克隆的情况下编译代码:
fn duplicate<T>(x: T) -> T { x } // sic fn main() { let a = 7; let b = duplicate(a); let a = String::from("example"); let b = duplicate(a); }
如果你真的想复制,只需使用 Clone ,如anything that implements Copy must implement Clone:
pub trait Copy: Clone { }
您通常会将其视为方法语法:
fn main() { let a = 7; let b: i32 = a.clone(); let a = String::from("example"); let b: String = a.clone(); }
如果需要函数,请使用完全限定语法:
fn main() { let a = 7; let b: i32 = Clone::clone(&a); let a = String::from("example"); let b: String = Clone::clone(&a); }
要么
fn main() { let a = 7; let b: i32 = i32::clone(&a); let a = String::from("example"); let b: String = String::clone(&a); }
所有显式类型( : foo )在这里都是冗余的,仅用于演示目的 .
: foo
Copy 暗示 Clone . 您可以使用 .clone() 作为重复功能 .
.clone()
2 回答
没有 .
是的,但它似乎没有提供超出现有
Clone
特性的任何 Value .您可能希望了解有关所有权的更多信息,因为您可以在不进行任何克隆的情况下编译代码:
如果你真的想复制,只需使用
Clone
,如anything that implements Copy must implement Clone:您通常会将其视为方法语法:
如果需要函数,请使用完全限定语法:
要么
所有显式类型(
: foo
)在这里都是冗余的,仅用于演示目的 .Copy
暗示Clone
. 您可以使用.clone()
作为重复功能 .