Closure capture

클로저는 본문이 값을 어떻게 쓰는지로 트레이트가 갈린다

읽기만 하면 Fn, 값을 바꾸면 FnMut, 값 자체를 밖으로 이동하면 FnOnce부터 확인한다.

본문 동작 캡처 형태 맞는 트레이트 코드에서 보는 신호
읽기만 함 불변 참조로 주변 값을 빌린다. Fn println!, 비교, 조회처럼 값을 소비하지 않는다.
값을 바꿈 가변 참조가 필요하다. FnMut push, 카운터 증가처럼 호출 때마다 상태가 변한다.
값을 가져감 소유권이 클로저 안으로 이동한다. FnOnce move, 스레드 전달, 본문 안의 값 이동이 보인다.
1. 이동 줄 찾기오류가 난 줄에서 값이 밖으로 빠져나가는지 먼저 본다.
2. 반복 호출 여부sort_by_key처럼 여러 번 부르면 FnMut 조건을 우선 확인한다.
3. 한 번 호출이면 완화unwrap_or_else는 필요할 때 한 번 호출하므로 FnOnce로 충분하다.