Arrays 为什么Rust中的for循环可以在片或迭代器上迭代,而不能在数组上迭代?
为什么Rust 1.44.0中的Arrays 为什么Rust中的for循环可以在片或迭代器上迭代,而不能在数组上迭代?,arrays,rust,Arrays,Rust,为什么Rust 1.44.0中的for循环可以在片或迭代器上迭代,但不能在数组上迭代?例如,以下内容使我陷入了一个循环: 在阵列上循环: fn main() { let a = [1, 2, 3, 4, 5]; for element in a { println!("element={}", element); } } 错误[E0277]:`[{integer};5]`不是迭代器 -->main.rs:4:20 | 4 |对于a中
for
循环可以在片或迭代器上迭代,但不能在数组上迭代?例如,以下内容使我陷入了一个循环:
在阵列上循环:
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a {
println!("element={}", element);
}
}
错误[E0277]:`[{integer};5]`不是迭代器
-->main.rs:4:20
|
4 |对于a中的元素{
|^借用带有`&`的数组,或调用`.iter()`对其进行迭代
|
=help:trait`std::iter::Iterator`未为`[{integer};5]实现`
=注意:数组不是迭代器,但像下面这样的切片是:`&[1,2,3]`
=注意:`std::iter::IntoIterator::into iter::所需`
在片上循环(版本1):
元素=1
元素=2
元素=3
元素=4
元素=5
在片上循环(版本2):
元素=1
元素=2
元素=3
元素=4
元素=5
在数组迭代器上循环:
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a.iter() {
println!("element={}", element);
}
}
元素=1
元素=2
元素=3
元素=4
元素=5
编译器会告诉您原因:因为数组不是迭代器
对于数组,必须实现IntoIterator
,不幸的是,添加这一点将是一个突破性的变化,而且“只是这样做”在生态系统中存在已知问题,因此在这方面进展缓慢
从Rust 1.51开始,您可以使用:
fn main(){
设a=[1,2,3,4,5];
对于std::array::IntoIter::new(a)中的元素{
println!(“元素={}”,元素);
}
}
编译器会告诉您原因:因为数组不是迭代器
对于数组,必须实现IntoIterator
,不幸的是,添加这一点将是一个突破性的变化,而且“只是这样做”在生态系统中存在已知问题,因此在这方面进展缓慢
从Rust 1.51开始,您可以使用:
fn main(){
设a=[1,2,3,4,5];
对于std::array::IntoIter::new(a)中的元素{
println!(“元素={}”,元素);
}
}
那么数组片是否实现了到迭代器
?这是如何工作的?如何“借用”数组a
将其转换为迭代器?@Derek与任何其他类型的方法相同:。数组片是否实现了到迭代器
?这是如何工作的?如何“借用”数组a
将其转换为迭代器?@Derek的方法与任何其他类型的方法相同:。
fn main() {
let a = [1, 2, 3, 4, 5];
for element in &a {
println!("element={}", element);
}
}
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a.iter() {
println!("element={}", element);
}
}