호출자가 넘김
1
&MyBox<String>
m은 커스텀 스마트 포인터이고, 함수 시그니처와 아직 맞지
않습니다.
hello(&m)은 하나의 호출처럼 보이지만, 컴파일러는
Deref::deref를 따라 필요한 참조 타입까지 이동합니다.
&MyBox<String>
m은 커스텀 스마트 포인터이고, 함수 시그니처와 아직 맞지
않습니다.
&String
MyBox<T>의 deref가 내부 값의 참조를
반환합니다.
&str
표준 라이브러리의 String 구현이 문자열 슬라이스 참조로
이어 줍니다.
fn hello(name: &str)
필요한 타입을 찾으면 변환 탐색이 멈추고, 호출은 그대로 읽기 쉬운 형태로 남습니다.
인자로 들어온 참조 타입을 확인합니다.
Deref 구현이 있으면 한 단계 더 안쪽 참조를 얻습니다.
매개변수 타입과 일치하면 그 참조로 함수를 호출합니다.
사용자는 &(*m)[..]처럼 기호가 많은 코드를 직접 쓰지
않아도 됩니다. 변환 횟수는 컴파일 타임에 정해지므로 런타임 비용도
추가되지 않습니다.