Closure capture

클로저: 자신의 환경을 캡처하는 익명 함수

클로저가 값을 빌리는지, 바꾸는지, 가져가는지를 본문 밖으로 이동되는 값과 Fn 계열 트레이트에 맞춰 읽습니다.

3

캡처 판정

Fn, FnMut, FnOnce를 호출 횟수와 값 이동 기준으로 나눕니다.

borrow

불변 캡처

출력처럼 읽기만 하면 클로저는 불변 참조를 잡고 주변 코드는 계속 값을 볼 수 있습니다.

mutate

가변 캡처

push처럼 값을 바꾸면 클로저 호출 전후의 가변 대여 범위를 먼저 확인합니다.

move

소유권 이동

스레드에 넘기는 클로저는 move로 값을 가져가 새 실행 위치의 수명을 보장합니다.

트레이트 읽기

  • unwrap_or_else는 필요할 때 한 번 호출하므로 FnOnce로 충분합니다.
  • sort_by_key는 여러 요소에 호출하므로 FnMut 조건을 요구합니다.

오류 해석

  • 클로저 본문에서 값이 밖으로 이동되는 줄을 먼저 찾습니다.
  • 카운터는 이동보다 가변 참조로 갱신해야 반복 호출에 맞습니다.