私は現在、Rustの借用の問題に直面しています。私はそれを解決するアイディアを持っています。しかし、私が見つけた方法は良い答えではないと私は思う。だから私はそれを解決する別の方法があるのだろうかと思っています。何かをするために追加の引数input
を取る方法、f2
を、持っているS
構造体のメンバを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();
}
構造:
は、私は私の状況を記述するために、次のコード例を使用しています。もう1つの方法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);
^~~~
:私は上記のコードをコンパイルすると
は、私は、次のエラーメッセージが表示されました。だから私は私がf1
の実装を変更することで問題を解決できることを知っている:
pub fn f1(&mut self) {
let v = self.val;
println!("F1");
self.f2(v);
}
しかし、私はこのソリューションは少し冗長な感じ。私はこの問題を解決する方法があるかどうか疑問です余分な変数バインディングを使わずに。
あなたの答えをありがとう。私は 'f2'に渡す前に' self.val'をコピーするほうがいいと思います。 –