Closures #2

https://doc.rust-lang.org/book/closures.html

closureを引数や戻り値にする事ができる。戻り値にするのは結構面倒というか、あまり直感的ではない感じ。

fn main() {
    fn call_with_one2(some_closure: &Fn(i32) -> i32) -> i32 { // closureを引数に取る。
        some_closure(1) // 引数で取ったclosureをコールする。
    }
    fn add_one(i: i32) -> i32 {
        i + 1
    }
    let f = add_one;
    let answer = call_with_one2(&f);
    assert_eq!(2, answer);

    fn factory() -> Box<(Fn(i32) -> i32)> { // closureを戻す。
        let num = 5;

        Box::new(move |x| x + num)
    }
    let f = factory();
    let answer = f(1);
    assert_eq!(6, answer);
}