2015-03-13 156 views
5

在迭代元組數組時,Rust爲什麼不解構元組?例如:爲什麼迭代元組數組時,元組不能解構?

let x: &[(usize, usize)] = &[...]; 

for (a,b) in x.iter() { 
    ... 
} 

導致錯誤:

error: type mismatch resolving `<core::slice::Iter<'_, (usize, usize)> as core::iter::Iterator>::Item == (_, _)`: 
expected &-ptr, 
found tuple [E0271] 

回答

13

的問題是,你的模式(a, b)(usize, usize)類型的元組,而你的迭代器返回的元組引用(即&(usize, usize)),所以typechecker正確地抱怨。

您可以通過添加在你的模式的&,這樣解決這個問題:

for &(a,b) in x.iter() {