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