Why the example can't run?

fn factory() -> (Fn(i32) -> i32) {
    let num = 5;
    |x| x + num
}

fn main() {
    let f = factory();
    let answer = f(1);
    assert_eq!(6, answer);
}

I don't know why, It just get a compile error, use rust 1.4 stable.

This example seems pretty outdated. In Rust 1.x it would look like

fn factory() -> Box<Fn(i32) -> i32> {
    let num = 5;
    Box::new(move |x| x + num)
}

fn main() {
    let f = factory();
    let answer = f(1);
    assert_eq!(6, answer);
}

See Baby Steps and Finding Closure in Rust | Huon on the internet.

2 Likes