我正在阅读关于Rust生命周期的文档。我尝试了这样的代码:
struct S {
x: i8,
}
impl S {
fn fun(self) {}
fn print(&self) {
println!("{}", self.x);
}
}
fn main() {
let s = S { x: 1 };
s.fun();
s.print();
}
我得到了以下错误:
error[E0382]: borrow of moved value: `s`
--> src/main.rs:16:5
|
15 | s.fun();
| - value moved here
16 | s.print();
| ^ value borrowed here after move
|
= note: move occurs because `s` has type `S`, which does not implement the `Copy` trait
这是因为fun(self)
方法获取了s
实例的所有权。将其更改为fun(&self)
即可解决该问题。我不明白为什么你会想让一个对象的方法控制自身。 我只能想到一个例子,析构方法,但如果你想处理对象的释放,那么它会被对象的所有者(在此示例中为
main
的范围)处理。为什么可以编写获取结构体所有权的方法?是否有任何情况需要这样做?