Por que o parâmetro "empresta" o valor? [duplicado]
Esta pergunta já tem uma resposta aqui:
Emprestar argumentos de verificação e função em Rust, correto ou zeloso? [duplicado] 1 respostaAqui está uma amostra:
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
Qual a razão pela qualx.f(x.0)
não funciona?x.0
é passado como argumento, vinculado aov
parâmetro, do tipou32
: não há absolutamente nenhuma possibilidade de que o corpo da função acessex.0
através do parâmetro
Além disso, me parece muito estranho que:
f(something);
não funciona, enquanto:
v = something;
f(v);
trabalho.