当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Iterator.fuse用法及代码示例


本文简要介绍rust语言中 core::iter::Iterator.fuse 的用法。

用法

fn fuse(self) -> Fuse<Self> where    Self: Sized,

创建一个在第一个 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-lang.org大神的英文原创作品 core::iter::Iterator.fuse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。