타입유추 작동을 세세하게 아는거는 하기 싫어서 그런데, 생략가능한 자잘한 경우에도 그냥 명시해도 될까요?
지금 생략가능한걸 알지만 명시하고싶은 경우가
1. 제네릭타입으로부터의 연관함수
2. 클로저의 시그니처
3. 변수의 선언과 초기화가 분리되어있는 경우
이 세가지경우에요
굳이 생략해야하나? 하는 의문이 들더라구요.
특히
let a = Vec::new(); 이런거도
제가보기엔 이후의 연산에 의해서, 어떤 실제타입의 네임스페이스인지를 추론하는거같은데,
저같은경우는 그냥
Vec::<i32>::new()
로 명시해주려고 하는데
구글링해보면 추론가능한부분은 전부 생략하는게 관례라는거 같더라구요.
근데 그러면 이미 함수시그니처를 언제나 시그니처를 기입해주는거가 관례랑 문법이 어긋난다는 증거물이고
애초에 생략 불가능한것들만 명시하려고 어떤걸 생략가능한지 불가능한지 따지고있는거도 굉장히 귀찮네요
지금 생략가능한걸 알지만 명시하고싶은 경우가
1. 제네릭타입으로부터의 연관함수
2. 클로저의 시그니처
3. 변수의 선언과 초기화가 분리되어있는 경우
이 세가지경우에요
굳이 생략해야하나? 하는 의문이 들더라구요.
특히
let a = Vec::new(); 이런거도
제가보기엔 이후의 연산에 의해서, 어떤 실제타입의 네임스페이스인지를 추론하는거같은데,
저같은경우는 그냥
Vec::<i32>::new()
로 명시해주려고 하는데
구글링해보면 추론가능한부분은 전부 생략하는게 관례라는거 같더라구요.
근데 그러면 이미 함수시그니처를 언제나 시그니처를 기입해주는거가 관례랑 문법이 어긋난다는 증거물이고
애초에 생략 불가능한것들만 명시하려고 어떤걸 생략가능한지 불가능한지 따지고있는거도 굉장히 귀찮네요
트레잇이 2개 겹치면 유추못함 얘를들어 let a = b.collect();하면 a는 FromIterator를 구현한 무언가인데 이걸 a[10]하면 그 무언가가 Index를 구현하는지 모르니까 에러남
ㅇㅇ 이런건 감으로 익히는게 좋지