입력 함수
클로저가 인자로 사용될 수 있으므로, 함수에 대해서도 똑같이 말할 수 있는지 궁금할 것입니다. 실제로 가능합니다! 클로저를 파라미터로 받는 함수를 선언하면, 해당 클로저의 트레이트 바운드를 만족하는 모든 함수를 파라미터로 전달할 수 있습니다.
// `Fn`으로 바운딩된 제네릭 `F` 인자를 받아
// 호출하는 함수를 정의합니다
fn call_me<F: Fn()>(f: F) {
f();
}
// `Fn` 바운드를 만족하는 래퍼 함수를 정의합니다
fn function() {
println!("저는 함수입니다!");
}
fn main() {
// `Fn` 바운드를 만족하는 클로저를 정의합니다
let closure = || println!("저는 클로저입니다!");
call_me(closure);
call_me(function);
}
추가로, Fn, FnMut, FnOnce 트레이트는 클로저가 주변 스코프에서 변수를 캡처하는 방식을 결정합니다.