Теперь я столкнулся с проблемой заимствования в Rust, и у меня есть идея решить ее. Но я думаю, что способ, который я нашел, не является хорошим ответом. Поэтому мне интересно, есть ли другой способ решить эту проблему.Передача члена структуры методу той же структуры в 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();
}
Структура S
имеет метод, f2
, который принимает дополнительный аргумент input
, чтобы сделать что-то. Существует еще один метод: 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);
}
Однако, я чувствую, что это решение немного избыточную. Мне интересно, есть ли способ решить эту проблему без использования дополнительной привязки переменных.
Спасибо за ваш ответ. Я думаю, что лучше скопировать 'self.val', прежде чем передать его в' f2'. –