重复使用范围进行迭代

时间:2015-06-25 08:55:19

标签: rust

我试图了解如何使用迭代器范围。如果我声明一个范围并将其与迭代器一起使用,是否可以将该范围与另一个迭代器重用? 例如,这不编译:

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);
}

1 个答案:

答案 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);
}

表明该范围的第一个值不是克隆迭代器的一部分。