2015-12-16 4 views
10

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?

Antwort

Verwandte Themen