常用Trait
常用Trait
Copy
pub trait Copy: Clone { }
一旦一种类型实现了
哪些情况下我们自定义的类型(如某个
struct Foo { //可实现Copy特性
a: i32,
b: bool,
}
struct Bar { //不可实现Copy特性
l: Vec<i32>,
}
因为
有两种方式可以实现
- 通过
derive 让Rust 编译器自动实现
#[derive(Copy, Clone)]
struct Foo {
a: i32,
b: bool,
}
编译器会自动检查
- 手动实现
Clone 和Copy trait
#[derive(Debug)]
struct Foo {
a: i32,
b: bool,
}
impl Copy for Foo {}
impl Clone for Foo {
fn clone(&self) -> Foo {
Foo{a: self.a, b: self.b}
}
}
fn main() {
let x = Foo{ a: 100, b: true};
let mut y = x;
y.b = false;
println!("{:?}", x); //打印:Foo { a: 100, b: true }
println!("{:?}", y); //打印:Foo { a: 100, b: false }
}
从结果我们发现