Não é possível emprestar como imutável porque também é emprestado como mutável em argumentos de função

O que está acontecendo aqui (Parque infantil)?

struct Number {
    num: i32
}

impl Number {
    fn set(&mut self, new_num: i32) {
        self.num = new_num;
    }
    fn get(&self) -> i32 {
        self.num
    }
}

fn main() {
    let mut n = Number{ num: 0 };
    n.set(n.get() + 1);
}

Dá este erro:

error[E0502]: cannot borrow `n` as immutable because it is also borrowed as mutable
  --> <anon>:17:11
   |
17 |     n.set(n.get() + 1);
   |     -     ^          - mutable borrow ends here
   |     |     |
   |     |     immutable bor,row occurs here
   |     mutable borrow occurs here

No entanto, se você simplesmente alterar o código para isso, ele funciona:

fn main() {
    let mut n = Number{ num: 0 };
    let tmp = n.get() + 1;
    n.set(tmp);
}

Para mim, esses parecem exatamente equivalentes - quero dizer, eu esperaria que o primeiro fosse transformado no último durante a compilação. O Rust não avalia todos os parâmetros de função antes de avaliar a chamada de função de próximo nível?

questionAnswers(1)

yourAnswerToTheQuestion