Function std::iter::from_fn
pub fn from_fn<T, F>(f: F) -> FromFn<F>ⓘNotable traits for FromFn<F>impl<T, F> Iterator for FromFn<F> where F: FnMut() -> Option<T>, type Item = T; where F: FnMut() -> Option<T>,
Creates a new iterator where each iteration calls the provided closure F: FnMut() -> Option<T>
.
This allows creating a custom iterator with any behavior without using the more verbose syntax of creating a dedicated type and implementing the Iterator
trait for it.
Note that the FromFn
iterator doesn’t make assumptions about the behavior of the closure, and therefore conservatively does not implement FusedIterator
, or override Iterator::size_hint()
from its default (0, None)
.
The closure can use captures and its environment to track state across iterations. Depending on how the iterator is used, this may require specifying the move
keyword on the closure.
Examples
Let’s re-implement the counter iterator from 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]);
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/iter/fn.from_fn.html