我现在在 Rust 中面临一个借用问题,我有一个解决它的想法。但我认为我找到的方式不是一个好的答案。所以我想知道是否有另一种方法来解决它。
我使用以下示例代码来描述我的情况:
struct S {
val: u8
}
impl S {
pub fn f1(&mut self) {
println!("F1");
self.f2(self.val);
}
pub fn f2(&mut self, input: u8) {
println!("F2");
// Do something with input
}
}
fn main() {
let mut s = S {
val: 0
};
s.f1();
}
StructureS
有一个方法 ,f2
它需要一个额外的参数input
来做某事。还有另一种方法 ,它使用of 结构f1
调用。局外人可能会调用其中一个或用于不同的用例。f2
val
S
f1
f2
当我编译上面的代码时,我收到以下错误消息:
src\main.rs:9:17: 9:25 error: cannot use `self.val` because it was mutably borrowed [E0503]
src\main.rs:9 self.f2(self.val);
^~~~~~~~
src\main.rs:9:9: 9:13 note: borrow of `*self` occurs here
src\main.rs:9 self.f2(self.val);
^~~~
我大致了解 Rust 中的借用是如何工作的。所以我知道我可以通过将实现更改f1
为:
pub fn f1(&mut self) {
let v = self.val;
println!("F1");
self.f2(v);
}
但是,我觉得这个解决方案有点多余。我想知道是否有办法在不使用额外变量绑定的情况下解决这个问题。