为什么Rust 1.44.0中的for循环可以迭代slice和iterator,但不能迭代数组呢?例如,下面的代码会出现错误:
循环遍历一个数组:
Rust也可以通过以下方式循环遍历向量:
循环遍历一个数组:
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a {
println!("element={}", element);
}
}
error[E0277]: `[{integer}; 5]` is not an iterator
--> main.rs:4:20
|
4 | for element in a {
| ^ borrow the array with `&` or call `.iter()` on it to iterate over it
|
= help: the trait `std::iter::Iterator` is not implemented for `[{integer}; 5]`
= note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]`
= note: required by `std::iter::IntoIterator::into_iter`
循环遍历一个切片(版本1):
fn main() {
let a = &[1, 2, 3, 4, 5];
for element in a {
println!("element={}", element);
}
}
element=1
element=2
element=3
element=4
element=5
循环遍历切片(第二版):
fn main() {
let a = [1, 2, 3, 4, 5];
for element in &a {
println!("element={}", element);
}
}
element=1
element=2
element=3
element=4
element=5
循环遍历数组迭代器:
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a.iter() {
println!("element={}", element);
}
}
element=1
element=2
element=3
element=4
element=5
Rust也可以通过以下方式循环遍历向量:
fn main() {
let v = vec![1, 2, 3, 4, 5];
for element in v {
println!("element={}", element);
}
}
element=1
element=2
element=3
element=4
element=5
IntoIterator
吗?这是如何工作的? - Derek Mahara
如何将其转换为迭代器? - Derek Mahar&[T]
有一个IntoIterator
的实现。 - trent