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
?