本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。