
164
이펙티브 러스트
하지만 같은 시그니처라도 수명을 생략하면 오해를 불러 일으킬 수 있다.
pub fn find_one_item(items: &[Item]) -> ReferenceHolder {
// ...
}
여기서 반환 타입에 대한 수명 매개변수를 생략했기 때문에 이 코드를 읽는 사람은 여기에 수
명이 관련되어 있다는 사실을 놓칠 수 있다.
이럴 때는 익명 수명
anonymous
lifetime
(
'_
)을 사용해 생략된 수명이 있음을 표시한다. 그러면 수명
이름을 모두 나열하지 않아도 된다.
pub fn find_one_item(items: &[Item]) -> ReferenceHolder<'_> {
// ...
}
간단히 말해 컴파일러가
'_
마커가 있는 곳마다 고유한 수명 이름을 만들어 준다. 이렇게 만들
어진 이름은 우리가 명시적으로 지정하지 않는 각 지점에서 내부적으로 적절히 사용된다.
이 기능은 수명 생략 규칙이 적용되는 다른 경우에서도 유용하다. 예를 들어 다음과 같이
Debug
트레이트의
fmt
메서드를 선언할 때
Formatter
인스턴스의 수명이
&
self
와 다르다는
사실을 익명 수명으로 표현한다. 여기서 수명 이름 자체는 중요하지 않기 때문이다.
pub trait Debug {
fn fmt(&self, f: &mut Formatter<'_>) ...