0
votes

In Rust 1.26 a new feature called impl Trait was stabilized which makes function able to return an unboxed closure. But how to define a struct field's type for an unboxed closure, code below doesn't compile:

fn return_closure() -> impl Fn() -> () {
    move || {
        println!("abc");
    }
}

struct HoldClosure {
    closure: impl Fn() -> ()
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };
}
1

1 Answers

1
votes

Just use a generic type argument.

fn return_closure() -> impl Fn() {
    move || {
        println!("abc");
    }
}

struct HoldClosure<F: Fn()> {
    closure: F,
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };

    (hold_my_closure.closure)();
}