我可以为范围类型执行此操作:
(0..3).collect::<Vec<i32>>();
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
[0, 1, 2].iter().collect::<Vec<i32>>();
Run Code Online (Sandbox Code Playgroud)
我得到了:
error: the trait `core::iter::FromIterator<&_>` is not implemented for the type `collections::vec::Vec<i32>` [E0277]
Run Code Online (Sandbox Code Playgroud)
为了避免这个错误,我必须这样做:
[0, 1, 2].iter().map(|&x| x).collect::<Vec<i32>>();
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我认为这两者是做同样事情的另一种方式.
DK.*_*DK. 11
他们不是一回事.
这里的问题是,调用iter阵列上产生Iterator的&i32秒.为了处理每个可能的数组,它不能按值返回元素,因为并非所有类型都实现,Copy并且您不能部分地移出数组.因此,为了收集到a Vec<i32>,你必须通过复制它们将&i32s转换为i32s.
它们不同的另一种方式是:范围不需要在某处包含所有元素的数组.所以也就是这样.
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |