| ... | ... | |
|---|
| 48 | 48 | println!("{a}"); |
|---|
| 49 | 49 | } }}}를 실행하면 컴파일 에러가 난다.[* 런타임 에러가 아니다!] 왜냐하면 스코프 안에서 선언 된 a를 수명이 끝난 스코프 밖에서 값을 조회하였기 때문이다. |
|---|
| 50 | 50 | ==== 제내릭 라이프타임 ==== |
|---|
| 51 | ===== 참조 둘 중 하나를 반환하는 함수 ===== |
|---|
| 51 | 52 | '''지옥의 시작''' |
|---|
| 52 | 53 | {{{#!syntax rust |
|---|
| 53 | 54 | fn longest<'a> (s1:&`a str,s2:&`a str) -> &`a str { |
|---|
| ... | ... | |
|---|
| 81 | 82 | |
|---|
| 82 | 83 | "아니 그러면 애초부터 result를 longest의 리턴으로 못넣게 하면 되잖아." 그게 수명주기 명시다. 지금 longest의 리턴값은 s2의 수명주기와 같다.[* `a로 수명주기를 명시한것 중이서 s2가 수명이 가장 짧기 때문] |
|---|
| 83 | 84 | |
|---|
| 85 | "그럼 인풋중 수명이 더 짧은 것을 리턴의 수명으로 정하면 되잖아?" [[https://github.com/dtolnay/rust-faq#why-arent-function-signatures-inferred|할 수 있는데 안한다]](...) ~~아니 왜요?~~ |
|---|
| 86 | |
|---|
| 84 | 87 | == 그 외 == |
|---|
| 85 | 88 | * 컴파일 언어이다. |
|---|
| 86 | 89 | * 컴파일 시간에 대부분의 런타임 에러를 잡아낸다. |
|---|