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()); }