Turn FnOnce into an FnMut


Can I turn an FnOnce into an FnMut if, on the first call, I run the FnOnce, and on subsequent calls, I take another path?

Sorry if this is an obvious question, I’m sleepy.


You can embed an FnOnce in a FnMut

    struct S(i32);
    let s = S(1);
    let o = move || {
        let r = s.0;
    let mut o = Some(o);
    let mut m = move || match o.take() {
        Some(o) => o(),
        None => 0,


Thanks, wrapping the FnOnce in an Option is a really elegant (and in hindsight, obvious) idea.