core::iter::Unfold: reword docs and add example
Remove note about core
This commit is contained in:
parent
daa0745886
commit
2e1911b47a
@ -2036,18 +2036,49 @@ for Inspect<'a, A, T> {
|
||||
}
|
||||
}
|
||||
|
||||
/// An iterator which just modifies the contained state throughout iteration.
|
||||
/// An iterator which passes mutable state to a closure and yields the result.
|
||||
///
|
||||
/// # Example: The Fibonacci Sequence
|
||||
///
|
||||
/// An iterator that yields sequential Fibonacci numbers, and stops on overflow.
|
||||
///
|
||||
/// ```rust
|
||||
/// use std::iter::Unfold;
|
||||
/// use std::num::Int; // For `.checked_add()`
|
||||
///
|
||||
/// // This iterator will yield up to the last Fibonacci number before the max value of `u32`.
|
||||
/// // You can simply change `u32` to `u64` in this line if you want higher values than that.
|
||||
/// let mut fibonacci = Unfold::new((Some(0u32), Some(1u32)), |&(ref mut x2, ref mut x1)| {
|
||||
/// // Attempt to get the next Fibonacci number
|
||||
/// // `x1` will be `None` if previously overflowed.
|
||||
/// let next = match (*x2, *x1) {
|
||||
/// (Some(x2), Some(x1)) => x2.checked_add(x1),
|
||||
/// _ => None,
|
||||
/// };
|
||||
///
|
||||
/// // Shift left: ret <- x2 <- x1 <- next
|
||||
/// let ret = *x2;
|
||||
/// *x2 = *x1;
|
||||
/// *x1 = next;
|
||||
///
|
||||
/// ret
|
||||
/// });
|
||||
///
|
||||
/// for i in fibonacci {
|
||||
/// println!("{}", i);
|
||||
/// }
|
||||
/// ```
|
||||
#[experimental]
|
||||
pub struct Unfold<'a, A, St> {
|
||||
f: |&mut St|: 'a -> Option<A>,
|
||||
/// Internal state that will be yielded on the next iteration
|
||||
/// Internal state that will be passed to the closure on the next iteration
|
||||
pub state: St,
|
||||
}
|
||||
|
||||
#[experimental]
|
||||
impl<'a, A, St> Unfold<'a, A, St> {
|
||||
/// Creates a new iterator with the specified closure as the "iterator
|
||||
/// function" and an initial state to eventually pass to the iterator
|
||||
/// function" and an initial state to eventually pass to the closure
|
||||
#[inline]
|
||||
pub fn new<'a>(initial_state: St, f: |&mut St|: 'a -> Option<A>)
|
||||
-> Unfold<'a, A, St> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user