迭代一组元组时,为什么Rust不会对元组进行解构?例如:
let x: &[(usize, usize)] = &[...];
for (a,b) in x.iter() {
...
}
Run Code Online (Sandbox Code Playgroud)
导致错误:
error: type mismatch resolving `<core::slice::Iter<'_, (usize, usize)> as core::iter::Iterator>::Item == (_, _)`:
expected &-ptr,
found tuple [E0271]
Run Code Online (Sandbox Code Playgroud)
fjh*_*fjh 14
问题是你的模式(a, b)是一个类型的元组(usize, usize),而你的迭代器返回对元组的引用(即&(usize, usize)),所以typechecker正确地抱怨.
您可以通过&在模式中添加一个来解决此问题,如下所示:
for &(a,b) in x.iter() {
Run Code Online (Sandbox Code Playgroud)