2015-12-16 5 views
10

私はタプルを分解し、結果の一部を新しい変数に代入し、結果の別の部分を既存の変数に代入したいと思います。結果をlet/match/for文の新しい変数にバインドせずにタプルを破棄できますか?

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

このコードは、それを再割り当てするのではなく、新しい変数を作成list

次のコードは、意図を(それが[0]を印刷する無限ループを生じさせるダム例です)を示します。

私は次のようにコードを変更した場合(新しいlist変数を導入しletを回避するために)、それはコンパイルされません:

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

コンパイルエラー:

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 

をこれを行う方法はありますか、またはデストラクタを使用できるのはletmatch、およびforです。

答えて

関連する問題