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
をこれを行う方法はありますか、またはデストラクタを使用できるのはlet
、match
、およびfor
です。