本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。