2015-12-16 8 views
10

Chciałbym zniszczyć krotkę i przypisać część wyniku do nowej zmiennej i przypisać inną część wyniku do istniejącej.Czy mogę zniszczyć krotkę bez powiązania wyniku z nową zmienną w instrukcji let/match/for?

Następujący kod ilustruje intencji (to niema przykład co powoduje zapętlenie drukowania [0])

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); 
    } 
} 

Kod ten tworzy nową zmienną list zamiast realokacja go.

Gdybym zmienić kod do poniższego (aby uniknąć let że wprowadza nową list zmiennej), nie kompilacji: Błąd

fn main() { 
    let mut list = &[0, 1, 2, 3][..]; 
    while !list.is_empty() { 
     let head; 
     (head, list) = list.split_at(1); 
     println!("{:?}", head); 
    } 
} 

kompilacji:

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 

Czy istnieje sposób, aby to zrobić, lub czy destrukturyzacja może być używana tylko w instrukcjach let, match i for?

Odpowiedz

Powiązane problemy