Wenn Variablen tauschen, die am ehesten, was Sie wollen neue Bindungen für a
und b
erstellen.
fn main() {
let (a, b) = (1, 2);
let (b, a) = (a, a + b);
}
In Ihrem tatsächlichen Fall gibt es jedoch keine nette Lösung. Wenn Sie wie oben beschrieben vorgehen, erstellen Sie immer neue Bindungen für a
und b
, aber Sie möchten die vorhandenen Bindungen ändern. Eine Lösung, die ich kenne, ist die Verwendung einer temporären:
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
}
Man könnte es auch machen, so dass Sie das Tupel mutieren:
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
}
Sie auch interessieren können den Inhalt von zwei Stücke in Vertauschen von Erinnerung. 99 +% der Zeit, die Sie wollen die Variablen neu zu binden, aber eine sehr geringe Menge an Zeit, die Sie wollen die Dinge „in place“ ändern:
fn main() {
let (mut a, mut b) = (1, 2);
std::mem::swap(&mut a, &mut b);
println!("{:?}", (a, b));
}
Beachten Sie, dass es nicht präzise ist diese Swap zu tun und füge die Werte in einem Schritt zusammen.
Bitte lesen Sie [* The Rust Programmiersprache *] (http://doc.rust-lang.org/stable/book/). Es deckt viele einführende Themen ab. – Shepmaster
@Shempmaster, habe einige Zeit damit verbracht, über [swap] (http://doc.rust-lang.org/std/mem/fn.swap.html) und [replace] (http: //doc.rust-lang. org/std/mem/fn.replace.html) aber ich bin mir nicht sicher, was ich hier brauche. –