【发布时间】:2017-05-12 22:07:51
【问题描述】:
我正在尝试使用 Fuse 迭代器适配器并且得到了意想不到的结果 (Playground link):
fn main() {
let mut i1 = (1..3).scan(1, |_, x| {
if x < 2 { None } else { Some(x) }
});
println!("{:?}", i1.next());
println!("{:?}", i1.next());
println!("{:?}", i1.next());
println!("");
let mut i2 = (1..3).scan(1, |_, x| {
if x < 2 { None } else { Some(x) }
}).fuse();
println!("{:?}", i2.next());
println!("{:?}", i2.next()); // This should print None
println!("{:?}", i2.next());
println!("");
}
哪些打印:
None
Some(2)
None
None
Some(2)
None
迭代器i1 正在返回我所期望的。它返回None,然后是Some(2),然后是None。 i2 是与 fuse() 适配的相同迭代器。 Fuse 应该让它在第一个None 之后返回None,并且由于它返回的第一个值是None,所以它应该是它返回的唯一值。但是,它的行为与i1 相同。我做错了什么?
【问题讨论】: