Quando scambiando variabili, la cosa più probabile è che si desidera creare nuovi attacchi per a
e b
.
fn main() {
let (a, b) = (1, 2);
let (b, a) = (a, a + b);
}
Tuttavia, nel tuo caso, non c'è una soluzione piacevole. Quando si fa come sopra, si creano sempre nuovi collegamenti per a
e b
, ma si desidera modificare i collegamenti esistenti. Una soluzione che conosco è quello di utilizzare una temporanea:
fn fibonacci(n: u64) -> u64 {
if n < 2 {
return n;
}
let mut fib_prev = 1;
let mut fib = 1;
for _ in 2..n {
let next = fib + fib_prev;
fib_prev = fib;
fib = next;
}
fib
}
Si potrebbe anche fare in modo che si Mutate the tuple:
fn fibonacci(n: u64) -> u64 {
if n < 2 {
return n;
}
let mut fib = (1, 1);
for _ in 2..n {
fib = (fib.1, fib.0 + fib.1);
}
fib.1
}
Si può anche essere interessati a scambiare il contenuto di due pezzi di memoria. 99 +% del tempo, si vuole ri-legare le variabili, ma una piccola quantità di tempo che si desidera cambiare le cose "a posto":
fn main() {
let (mut a, mut b) = (1, 2);
std::mem::swap(&mut a, &mut b);
println!("{:?}", (a, b));
}
Nota che non è concisa fare questo swap e aggiungi i valori insieme in un unico passaggio.
Assicurati di leggere [* The Rust Programming Language *] (http://doc.rust-lang.org/stable/book/). Riguarda molti argomenti introduttivi. – Shepmaster
@Shepmaster, ha trascorso un po 'di tempo a leggere su [swap] (http://doc.rust-lang.org/std/mem/fn.swap.html) e [sostituire] (http: //doc.rust-lang. org/std/mem/fn.replace.html) ma non sono sicuro di cosa ho bisogno qui. –