本文簡要介紹rust語言中 Function std::iter::from_fn
的用法。
用法
pub fn from_fn<T, F>(f: F) -> FromFn<F> where F: FnMut() -> Option<T>,
創建一個新的迭代器,每次迭代都調用提供的閉包 F: FnMut() -> Option<T>
。
這允許創建具有任何行為的自定義迭代器,而無需使用更冗長的語法來創建專用類型並為其實現 Iterator
特征。
請注意,FromFn
迭代器不會對閉包的行為做出假設,因此保守地不會實現 FusedIterator
,或從其默認 (0, None)
覆蓋 Iterator::size_hint()
。
閉包可以使用捕獲及其環境來跟蹤迭代中的狀態。根據迭代器的使用方式,這可能需要在閉包上指定 move
關鍵字。
例子
讓我們重新實現 module-level documentation 中的計數器迭代器:
let mut count = 0;
let counter = std::iter::from_fn(move || {
// Increment our count. This is why we started at zero.
count += 1;
// Check to see if we've finished counting or not.
if count < 6 {
Some(count)
} else {
None
}
});
assert_eq!(counter.collect::<Vec<_>>(), &[1, 2, 3, 4, 5]);
相關用法
- Rust from_u32_unchecked用法及代碼示例
- Rust from_utf8_unchecked用法及代碼示例
- Rust from_digit用法及代碼示例
- Rust from_raw_parts用法及代碼示例
- Rust from_u32用法及代碼示例
- Rust from_utf8用法及代碼示例
- Rust from_utf8_mut用法及代碼示例
- Rust from_boxed_utf8_unchecked用法及代碼示例
- Rust from_utf8_unchecked_mut用法及代碼示例
- Rust f32.exp用法及代碼示例
- Rust f32.hypot用法及代碼示例
- Rust f32.minimum用法及代碼示例
- Rust f64.signum用法及代碼示例
- Rust f64.sqrt用法及代碼示例
- Rust f32.sqrt用法及代碼示例
- Rust f32.abs_sub用法及代碼示例
- Rust f64.is_finite用法及代碼示例
- Rust f32.cos用法及代碼示例
- Rust f32.is_sign_positive用法及代碼示例
- Rust f32.log10用法及代碼示例
- Rust f64.round用法及代碼示例
- Rust format_args用法及代碼示例
- Rust f32.total_cmp用法及代碼示例
- Rust f64.div_euclid用法及代碼示例
- Rust f64.hypot用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Function std::iter::from_fn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。