在Rust书Method Syntax chapter中,有一个取得自我所有权的例子:
struct Circle {
x: f64,
y: f64,
radius: f64,
}
impl Circle {
fn reference(&self) {
println!("taking self by reference!");
}
fn mutable_reference(&mut self) {
println!("taking self by mutable reference!");
}
fn takes_ownership(self) {
println!("taking ownership of self!");
}
}
需要拥有自己的典型用例是什么?是否只有当self是堆栈中的值(它将被复制的位置)时?
答案 0 :(得分:3)
当方法使对象失效时,获取所有权是有意义的。想象一个方法Iterator.drop(u32)
,实现为返回一个新对象而不是修改现有对象。在原始迭代器上调用其他方法会导致不一致。
此类失效的其他示例将是不同类型的包装器。