lifetime 이 사방에 있다면, 왜 너는 거의 안 썼지? 컴파일러가 elision 규칙 을 적용하거든 — 뻔한 경우를 채워줘서 네가 안 해도 되게 하는 기본값 묶음.
elision 규칙 세 개
하나: 각 참조 파라미터는 자기 lifetime 을 받아. 둘: 입력 lifetime 이 정확히 하나면, 그게 모든 출력에 할당돼. 셋: &self 파라미터 (메서드) 가 있으면, 그 lifetime 이 모든 출력에 할당돼. 이 셋이 함수 대다수를 커버해 — 그래서 fn first_word(s: &str) -> &str 가 표기 불필요해: 규칙 둘이 단일 입력의 lifetime 을 출력에 할당하거든.
elision 이 못 정할 때
longest 함수는 elision 에 실패해, 입력 lifetime 이 둘 이라 규칙 둘이 안 먹거든 — 컴파일러가 출력이 어느 쪽에서 빌리는지 못 추측해. 그게 네가 끼어들어 표기하는 정확한 틈이야. elision 은 뻔한 걸 처리하고; 너는 모호한 걸 처리해.
먼저 표기 없이 써봐. elision 덕에 참조를 반환하는 함수 대부분이 그냥 컴파일돼. 컴파일러가 관계를 못 추론한다고 말할 때만 명시적
'a 로 손 뻗어 — 표기하기 전에 컴파일러가 물어보게 둬.특별한 lifetime: 'static
'static 은 '프로그램 전체 동안 유효' 라는 뜻이야. 문자열 리터럴이 &'static str 이야 — 바이너리에 구워져서 절대 해제 안 돼. 진짜 쓸모 있는 lifetime 이지만, 초보가 에러 잠재우려고 'static 을 갖다 붙이면 보통 더 깊은 소유권 문제를 가려. 데이터가 진짜 영원히 살 때 써, 에러 잠재우개로 말고.