Lifetimes in Data Structures
만약 빌려온 데이터를 저장하는 타입(구조체 같은)인 경우, 반드시 수명 표기를 해야합니다.
If a data type stores borrowed data, it must be annotated with a lifetime:
#[derive(Debug)] struct Highlight<'doc>(&'doc str); fn erase(text: String) { println!("Bye {text}!"); } fn main() { let text = String::from("The quick brown fox jumps over the lazy dog."); let fox = Highlight(&text[4..19]); let dog = Highlight(&text[35..43]); // erase(text); println!("{fox:?}"); println!("{dog:?}"); }
역주
- Highlight 구조체는 참조문자열(&str)을 저장합니다. 아래 출력문에서 text를 출력해도 동일하게 전부 출력됩니다.
- 하지만 중간에 텍스트를 erase로 삭제하려고 하면 빌린(참조)가 설정되 있어서 소유권 이동이 불가하다는 에러가 발생합니다.
- try it!