소개
이 실습에서는 함수가 클로저를 매개변수로 받을 수 있는 방법을 배우게 됩니다. 이를 통해 클로저의 특성 제약 조건을 충족하는 모든 함수를 인수로 사용할 수 있습니다. Fn, FnMut, FnOnce 트레이트는 클로저가 외부 범위의 변수를 어떻게 캡처하는지 지정합니다.
참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어
main.rs를 사용하고rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.
입력 함수
클로저를 인수로 사용할 수 있다면, 함수도 마찬가지일까요? 물론 가능합니다! 클로저를 매개변수로 받는 함수를 선언하면 해당 클로저의 특성 제약 조건을 충족하는 모든 함수를 매개변수로 전달할 수 있습니다.
// 제네릭 `F` 인수를 받아 `Fn` 으로 제한하고 호출하는 함수 정의
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 트레이트는 클로저가 외부 범위의 변수를 캡처하는 방식을 지정합니다.
요약
축하합니다! 입력 함수 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.