
Rust 函数调用时传参和变量绑定时默认使用移动语义 move , 只有实现 Copy trait 时才进行拷贝。
在Rust中只有基本类型和少数结构实现了 Copy ,其他自定义结构需要自己来实现。
// Copy 继承自 Clone
// 注释掉编译会出错,
#[derive(Copy, Clone)]
pub struct S {
flag: bool,
value: i32,
}
impl S {
fn new() -> S {
S {
flag: false,
value: 0,
}
}
fn set_flag(&mut self, ok: bool) {
self.flag = ok;
}
fn set_value(&mut self, value: i32) {
self.value = value;
}
fn print(&self) {
println!("{:?} {:?}", self.flag, self.value);
}
}
fn main() {
let set_flag = |mut s: S| { s.set_flag(true); s.print();};
let mut s = S::new();
// 自动 copy s , 机使用 Copy 语义
set_flag(s);
s.print();
}




近期评论