feat: replace unfold
with from_fn
for generate command
This commit is contained in:
parent
d5e00c0d5d
commit
db7128f9b9
|
@ -81,7 +81,8 @@ used as the next argument to the closure, otherwise generation stops.
|
||||||
// A type of Option<S> is used to represent state. Invocation
|
// A type of Option<S> is used to represent state. Invocation
|
||||||
// will stop on None. Using Option<S> allows functions to output
|
// will stop on None. Using Option<S> allows functions to output
|
||||||
// one final value before stopping.
|
// one final value before stopping.
|
||||||
let iter = unfold(Some(initial), move |state| {
|
let mut state = Some(initial);
|
||||||
|
let iter = std::iter::from_fn(move || {
|
||||||
let arg = state.take()?;
|
let arg = state.take()?;
|
||||||
|
|
||||||
let (output, next_input) = match closure.run_with_value(arg) {
|
let (output, next_input) = match closure.run_with_value(arg) {
|
||||||
|
@ -160,7 +161,7 @@ used as the next argument to the closure, otherwise generation stops.
|
||||||
// We use `state` to control when to stop, not `output`. By wrapping
|
// We use `state` to control when to stop, not `output`. By wrapping
|
||||||
// it in a `Some`, we allow the generator to output `None` as a valid output
|
// it in a `Some`, we allow the generator to output `None` as a valid output
|
||||||
// value.
|
// value.
|
||||||
*state = next_input;
|
state = next_input;
|
||||||
Some(output)
|
Some(output)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user