callable values

`map`에 넘기는 것은 클로저일 수도, 함수 이름일 수도 있다

함수 포인터 `fn`은 세 클로저 트레이트를 모두 구현하므로, 클로저를 받는 API에 명명된 함수도 넣을 수 있다.

inline closure

가까운 변환을 바로 표현

map(|i| i.to_string())

짧고 지역적인 의도를 읽기 좋게 남길 때 자연스럽다.

function item

이미 있는 함수 이름 재사용

map(ToString::to_string)

완전 정규화 문법으로 어느 트레이트의 함수를 쓸지 명확히 한다.

enum initializer

배리언트 생성자도 호출 가능

map(Status::Value)

각 `u32` 값을 같은 이름의 배리언트 인스턴스로 감싼다.

Fn + FnMut + FnOnce

대부분의 API는 제네릭 클로저 트레이트로 받는다

그래서 함수와 클로저를 모두 허용하려면 `fn`으로 고정하기보다 `F: Fn(...)` 형태가 더 유연하다.

fn only

외부 C 코드 같은 경계

클로저 개념이 없는 환경과 맞물릴 때는 함수 포인터 타입을 직접 쓰는 선택이 의미를 갖는다.