本文简要介绍rust语言中 std::iter::Iterator.fuse
的用法。
用法
fn fuse(self) -> Fuse<Self>
创建一个在第一个 None
之后结束的迭代器。
在迭代器返回 None
后,未来的调用可能会或可能不会再次产生 Some(T)
。 fuse()
适配一个迭代器,确保在给定 None
之后,它将永远返回 None
。
请注意, Fuse
包装器是实现 FusedIterator
特征的迭代器上的 no-op。因此,如果 FusedIterator
特征实施不当,fuse()
可能会出现错误行为。
例子
基本用法:
// an iterator which alternates between Some and None
struct Alternate {
state: i32,
}
impl Iterator for Alternate {
type Item = i32;
fn next(&mut self) -> Option<i32> {
let val = self.state;
self.state = self.state + 1;
// if it's even, Some(i32), else None
if val % 2 == 0 {
Some(val)
} else {
None
}
}
}
let mut iter = Alternate { state: 0 };
// we can see our iterator going back and forth
assert_eq!(iter.next(), Some(0));
assert_eq!(iter.next(), None);
assert_eq!(iter.next(), Some(2));
assert_eq!(iter.next(), None);
// however, once we fuse it...
let mut iter = iter.fuse();
assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), None);
// it will always return `None` after the first time.
assert_eq!(iter.next(), None);
assert_eq!(iter.next(), None);
assert_eq!(iter.next(), None);
相关用法
- Rust Iterator.find_map用法及代码示例
- Rust Iterator.flat_map用法及代码示例
- Rust Iterator.for_each用法及代码示例
- Rust Iterator.flatten用法及代码示例
- Rust Iterator.find用法及代码示例
- Rust Iterator.filter用法及代码示例
- Rust Iterator.filter_map用法及代码示例
- Rust Iterator.fold用法及代码示例
- Rust Iterator.skip_while用法及代码示例
- Rust Iterator.max_by_key用法及代码示例
- Rust Iterator.is_sorted用法及代码示例
- Rust Iterator.cmp用法及代码示例
- Rust Iterator.is_partitioned用法及代码示例
- Rust Iterator.intersperse用法及代码示例
- Rust Iterator.scan用法及代码示例
- Rust Iterator.min用法及代码示例
- Rust Iterator.peekable用法及代码示例
- Rust Iterator.rev用法及代码示例
- Rust Iterator.product用法及代码示例
- Rust Iterator.any用法及代码示例
- Rust Iterator.max用法及代码示例
- Rust Iterator.by_ref用法及代码示例
- Rust Iterator.min_by用法及代码示例
- Rust Iterator.copied用法及代码示例
- Rust Iterator.inspect用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::iter::Iterator.fuse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。