我试图了解如何使用迭代器范围。如果我声明一个范围并将其与迭代器一起使用,是否可以将该范围与另一个迭代器重用? 例如,这不编译:
fn main() {
let smallr = 0..10;
for i in smallr {
println!("value is {}", i);
}
//let smallr = 0..15; re-defining smallr will work!
let sum = smallr.fold(0, |sum, x| sum + x);
println!("{}", sum);
}
答案 0 :(得分:3)
范围类型
未实现<li ><a href="javaScript:void(0)" onClick="goback()">Go Back</a></li>
<li ><a href="javaScript:void(0)" onClick="goback()">Go Back</a></li>
。因此,在for循环中使用范围将消耗它。如果要创建范围的副本,可以使用
:<li onClick="goback()" >Go Back</li>
<li onClick="goback()" >Go Back</li>
请注意,在可变范围内使用时,这可能会导致令人困惑的行为(afaik是Range
未实现Copy
的原因)。范围也是同时的迭代器。如果您只部分使用迭代器然后克隆它,那么您将获得部分消耗的迭代器的克隆。
作为陷阱的一个例子:
.clone()
打印
for i in smallr.clone() {
println!("value is {}", i);
}
表明该范围的第一个值不是克隆迭代器的一部分。