はじめに
この実験では、関数がクロージャをパラメータとして受け取る方法を学び、クロージャのトレイト境界を満たす任意の関数を引数として使用できるようになります。Fn、FnMut、およびFnOnceトレイトは、クロージャが囲まれたスコープから変数をキャプチャする方法を規定します。
注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、
main.rsを使用して、rustc main.rs &&./mainでコンパイルして実行できます。
入力関数
クロージャを引数として使用できるので、関数についても同じことが言えるかどうか疑問に思うかもしれません。実際、そうすることができます!クロージャをパラメータとして受け取る関数を宣言すると、そのクロージャのトレイト境界を満たす任意の関数をパラメータとして渡すことができます。
// ジェネリックな `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);
}
追加の注意として、Fn、FnMut、およびFnOnceのトレイトは、クロージャが囲まれたスコープから変数をキャプチャする方法を規定します。
まとめ
おめでとうございます!あなたは入力関数の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。