関数に関数を渡す(@Rust)

関数の引数としてクロージャーを渡せるのと同様に関数も引数として渡すことができます。

以下がサンプルのコードですが、ここではクロージャー(sqr)と関数(sqr_f)とそれらの引数も同時に関数(apply_clo())に渡しています。

当然トレイト境界と引数がクロージャーと同じ関数(ここではFn(i32))でないと渡せませんが、


fn apply_clo<F: Fn(i32)>(i: i32, f: F) {
    f(i);
}

fn main() {
    // ARG for the closure
    let sqr = |y: i32| println!("{}", y*y);

    // equivalent function
    fn sqr_f(y: i32){
        println!("{}", y*y);
    }

    apply_clo(23, sqr);
    apply_clo(32, sqr_f);
}

 

admin

 

カテゴリーRust