8.2 Closures

Rust에서 클로저, 람다라고 불리기도 하는 함수는 둘러진 환경을 캡쳐한다. 예로, x 변수를 캡쳐하는 클로저다.

|val| val + x

클로저의 문법과 기능은 그들을 즉각적으로 사용하는 것을 매우 편리하게 만든다. 클로저를 호출하는 것은 정확히 함수를 호출하는 것과 같다. 하지만, 매개 변수 및 반환 타입은 암시 될 수 있고 매개 변수의 이름은 반드시 명시되어야 한다.

클로저가 가진 다른 특성들:

  • () 대신 || 안에 매개 변수들을 넣는다.
  • 단일 표현문은 경계 구분자({})은 옵션 (다른 경우 필수).
  • 외부 환경의 변수를 캡쳐 할 수 있는 능력.
fn main() {
    // 함수와 클로저를 통한 증가.
    fn  function            (i: i32) -> i32 { i + 1 }

    // 클로저는 익명이다, 여기에선 참조로 바인딩 합니다. 
    // 주해는 함수 주해와 동일하지만 몸체를 감싸는 `{}`처럼 선택 사항이다.
    // 이런 이름없는 함수들는 적절하게 명명된 변수들에 할당됩니다. 
    let closure_annotated = |i: i32| -> i32 { i + 1 };
    let closure_inferred  = |i     |          i + 1  ;

    let i = 1;
    // 함수와 클로저를 호출한다.
    println!("function: {}", function(i));
    println!("closure_annotated: {}", closure_annotated(i));
    println!("closure_inferred: {}", closure_inferred(i));

    // 인자를 취하지 않는 클로저는 `i32`를 반환한다.
    // 반환 타입은 추정된다. 
    let one = || 1;
    println!("closure returning one: {}", one());

}

results matching ""

    No results matching ""