2015-12-16 5 views
10

Bir tuple tahsis etmek ve sonucun bir kısmını yeni bir değişkene atamak ve sonucun başka bir kısmını var olana atamak istiyorum.Bir sonucu/match/for deyiminde sonucu yeni bir değişkene bağlamadan bir tuple atayabilir miyim?

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

Bu kod yeniden atama yerine yeni bir değişken list oluşturur:

Aşağıdaki kod amacı (bu [0] baskı sonsuz bir döngü ile sonuçlanan bir aptal örnek) göstermektedir.

Ben aşağıdakilere kodunu değiştirirseniz (yeni list değişken tanıtır let önlemek için), bu derleme değil:

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

Derleme hatası:

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 

Bunu yapmanın bir yolu var mı, yoksa yalnızca let, match ve for ifadelerinde kullanılabilir mi?

cevap