fn longest(x: &str, y: &str) -> &str {
if x.len() > y.len() {
x } else {
y } }
위 코드가 수명 표시를 안해서 컴파일이 안된다는건 알겠는데
책에 이렇게도 쓰여있거든?
"함수를 정의하는 시점에서는 이 함수에 어떤 타입이 실제로 전달될 것인지를 알 수 없고
if else 중 어떤 코드가 실행될 것인지도 알 수 없다."
이해가 안가는게 매개변수랑 리턴에 다 타입을 써줬는데 왜 어떤 타입이 실제로 전달될지를 모른단거임??
String일 수도 있고 (as_str) &'static str도 있고
예를 들면 longest(String::from("asd").as_str())이러면 이 함수가 끝나자 마자 &str의 수명이 끝나지 않을까? 하지만 longest("asd")이면 항상 가능하겠지
아하
라이프타임을 생략햇으니까 차이가 없어보이는거임
타입을 모른다기보다는 라이프타임을 모른다고 하는게 더 맞을듯
ㅇㅇ 이거 - dc App
저러면 x랑 y중에 짧은 수명을 반환하게 하는건데 명시안하면 컴파일러가 알아서 짧은 수명을 가지게 해줘서 되는거임 그냥 둘다 'a 가지게하고 'a 반환해도 똑같음
'a랑 'b로하고 둘중 하나 반환할려면 컴파일 타임에는 모르니까 에러인식