исправление путем «изменения способа десагарства вызовов методов», но все же предпочитает более общий подход, к сожалению, без объяснения причин.
от вопрос уже есть ответ здесь:
Занимать проверку и аргументы функции в Rust, правильно или более усердно? [Дубликат] 1 ответВот образец:
struct X(u32);
impl X {
fn f(&mut self, v: u32) {}
}
fn main() {
let mut x = X(42);
// works
let v = x.0;
x.f(v);
// cannot use `x.0` because it was mutably borrowed
x.f(x.0);
}
error[E0503]: cannot use `x.0` because it was mutably borrowed
--> src/main.rs:16:9
|
16 | x.f(x.0);
| - ^^^ use of borrowed `x`
| |
| borrow of `x` occurs here
В чем причинаx.f(x.0)
не работает?x.0
передается в качестве аргумента, привязанного кv
параметр типаu32
: нет абсолютно никакой возможности, что функция доступа к телуx.0
через параметр.
Более того, мне кажется очень странным, что:
f(something);
не работает, пока:
v = something;
f(v);
работает.