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


Rust from_fn用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 Function std::iter::from_fn。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。