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); }