Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

入力関数

クロージャは引数として使用できるため、関数についても同じことが言えるのではないかと思うかもしれません。 そして実際、その通りです!クロージャをパラメータとして受け取る関数を宣言した場合、 そのクロージャのトレイト境界を満たす任意の関数をパラメータとして渡すことができます。

// ジェネリックな `F` 引数を取り、`Fn` で境界付けして、
// それを呼び出す関数を定義する
fn call_me<F: Fn()>(f: F) {
    f();
}

// `Fn` 境界を満たすラッパー関数を定義する
fn function() {
    println!("I'm a function!");
}

fn main() {
    // `Fn` 境界を満たすクロージャを定義する
    let closure = || println!("I'm a closure!");

    call_me(closure);
    call_me(function);
}

補足として、FnFnMut、および FnOnce traits は、 クロージャが外側のスコープから変数をどのようにキャプチャするかを規定します。

関連項目:

FnFnMut、および FnOnce