함수 매개변수로서의 클로저

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 함수가 클로저를 매개변수로 받을 수 있는 방법을 배우게 됩니다. 이를 통해 클로저의 특성 제약 조건을 충족하는 모든 함수를 인수로 사용할 수 있습니다. 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 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.