Ich möchte ein Tupel destrukturieren und einen Teil des Ergebnisses einer neuen Variablen zuweisen und einen anderen Teil des Ergebnisses einem vorhandenen zuweisen.Kann ich ein Tupel destrukturieren, ohne das Ergebnis in einer let/match/for-Anweisung an eine neue Variable zu binden?
Der folgende Code zeigt die Absicht (es ist ein stummes Beispiel, das in einer Endlosschleife Druck [0]
führt):
fn main() {
let mut list = &[0, 1, 2, 3][..];
while !list.is_empty() {
let (head, list) = list.split_at(1);
// An obvious workaround here is to introduce a new variable in the above
// let statement, and then just assign it to list.
println!("{:?}", head);
}
}
Dieser Code erstellt eine neue Variable list
anstatt es zu Neuzuweisen.
Wenn ich den Code der folgenden ändern (die let
zu vermeiden, dass die neue list
Variable einführt), ist es nicht kompilieren:
fn main() {
let mut list = &[0, 1, 2, 3][..];
while !list.is_empty() {
let head;
(head, list) = list.split_at(1);
println!("{:?}", head);
}
}
Übersetzungsfehler:
error[E0070]: invalid left-hand side expression
--> src/main.rs:5:9
|
5 | (head, list) = list.split_at(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ left-hand of expression not valid
Gibt es eine Möglichkeit, dies zu tun, oder kann die Destrukturierung nur in den Anweisungen let
, match
und for
verwendet werden?