我可以这样做的范围类型:
(0..3).collect::<Vec<i32>>();但我不能做同样的事
[0, 1, 2].iter().collect::<Vec<i32>>();这样我就明白了:
error: the trait `core::iter::FromIterator<&_>` is not implemented for the type `collections::vec::Vec<i32>` [E0277]为了避免这个错误,我必须这样做:
[0, 1, 2].iter().map(|&x| x).collect::<Vec<i32>>();为什么是这样?我以为这两个人做同一件事是另一种方式。
发布于 2015-01-24 10:10:56
他们不是一回事。
这里的问题是,对数组上的iter调用会产生一个Iterator of &i32。为了处理每个可能的数组,它不能按值返回元素,因为不是所有类型都实现Copy,而且不能部分地从数组中移出。因此,为了收集到Vec<i32>,您必须通过复制&i32s将它们转换为i32。
另一种不同的方式是:范围不需要包含所有元素的数组。所以也是这样的。
https://stackoverflow.com/questions/28124323
复制相似问题