¿Por qué el parámetro "toma prestado" el valor? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Verificador de préstamos y argumentos de función en Rust, correcto o demasiado celoso? [duplicar] 1 respuesta

Aquí hay una muestra:

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

(Patio de óxido)

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

Cual es la razonx.f(x.0) ¿No funciona?x.0 se pasa como argumento, vinculado a lav parámetro, de tipou32: no hay absolutamente ninguna posibilidad de que la función de acceso al cuerpox.0 a través del parámetro.

Además, me parece muy extraño que:

f(something);

no funciona, mientras que:

v = something;
f(v);

trabajos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta