这是我正在尝试做的一个例子:
for &xs in &[&[1, 2, 3].iter().map(|x| x + 1)] {
for &x in xs {
println!("{}", x);
}
}
这给了我以下错误:
error[E0277]: the trait bound `&std::iter::Map<std::slice::Iter<'_, {integer}>, [closure@src/main.rs:2:40: 2:49]>: std::iter::Iterator` is not satisfied
--> src/main.rs:3:9
|
3 | / for &x in xs {
4 | | println!("{}", x);
5 | | }
| |_________^ the trait `std::iter::Iterator` is not implemented for `&std::iter::Map<std::slice::Iter<'_, {integer}>, [closure@src/main.rs:2:40: 2:49]>`
|
= note: `&std::iter::Map<std::slice::Iter<'_, {integer}>, [closure@src/main.rs:2:40: 2:49]>` is not an iterator; maybe try calling `.iter()` or a similar method
= note: required by `std::iter::IntoIterator::into_iter`
...这是非常令人惊讶的,因为我清楚地看到 how
std::Iter::Map
implements Iterator
。为什么它会提示以及如何迭代映射切片的切片?
最佳答案
&T
不能在 next
变异时迭代。
因此,如果您有 &Map<_, _>
,则无法对其进行迭代。
你可能没有意识到 &[1,2,3].iter().map(|&x| x+1)
意味着
&([1,2,3].iter().map(|&x| x+1))
给出引用。
使用
for &xs in &[&mut ...]
也不起作用,因为它需要将 xs
从不可变引用中移出。目前也没有固定长度数组的按值迭代器。我相信最简单的解决方案是for xs in &mut [&mut [1, 2, 3].iter().map(|&x| x+1)] {
for x in xs {
println!("{}", x);
}
}
请注意,这还需要修复
map
调用的问题,该调用并未取消引用其输入。关于rust - 如何遍历映射切片的切片?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30959539/