當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Iterator.fuse用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 std::iter::Iterator.fuse。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。