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 resposta

Aqui 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);
}

(Campo de jogos da oxidação)

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.

questionAnswers(1)

yourAnswerToTheQuestion