1. 함수 포인터
타입명에 fn 키워드가 들어갔으면 모두 함수 포인터인데 시그니쳐는 물론 unsafe나 extern등의 키워드에 따라 다른 타입취급을함
그래서 크기별로 impl해주는 배열처럼 fn들도 impl을 시그니쳐별로 다 만들어줘야함
unsafe는 함수 호출이 unsafe 하다는거고
extern은 외부 abi를 사용해 호출한다는 뜻임 디폴트는 extern "Rust"고 extern "C"는 C abi라는식
2. Fn trait
Rust에는 함수를 나타내는 3가지 trait가 있음
Fn FnOnce FnMut인데 차이점은 call 함수가 &self냐 self냐 &mut self냐인데
그래서 FnOnce는 루프에서 못쓴다던가 Fn에는 &mut를 넣어도 먹통이라던가 몇몇 차이가 있는데 왠만하면 FnMut를 쓰게될거임
trait라서 !Sized 타입이므로 매개변수에 바로 넣는다던가 하는건 안됨 제네릭 쓰던가 박싱하던가 &dyn를 쓰도록 하자
3. 클로저
| 매개변수 | 함수본문
이 형태로 구성됨 expression만 있으면 돼서 {}를 안쓰고
let foo = || 0; 같이 쓰는것도 가능함
익명타입을 만들어서 Fn들을 구현시킴
말그대로 익명이라 스코프를 벗어나서 쓰려면 trait의 형태로 전달해야함
클로저에서 레퍼런스를 캡쳐해버리면 클로저 객체의 수명에 묶여버리므로 조심해서 써야함
특히 &mut는 조심해서 쓰자
또 || 앞에 move를 붙이면 변수를 레퍼런스로 캡쳐하는대신 아얘 이동을 시켜버림
이렇게 Copy trait들은 복사되지만 Arc같은 타입들은 move로 넘기기전에 clone시켜야 원본도 계속 쓸수있음
부분순서는 뭐야? - 훈다리 훈다리
PartialOrd<T>면 T랑 비교를 할수있다는뜻임
Ord는 PartialOrd<Self>랑 같은말이고
그리고 Trait이란 뭐임? 그리고 타입끼리 순서비교가 된다고?? - 훈다리 훈다리
인터페이스랑 비슷한데
http://gall.dcinside.com/mgallery/board/view/?id=github&no=652&s_type=search_all&s_keyword=trait&page=1
이거 한번 봐봐
타입의 값이 순서비교가 된다는 뜻인가? 그리고 미안한데, 씨샵이랑 자바 안 해서 interface 모름 - 훈다리 훈다리
interface 모르면 댓글가지곤 설명하기 힘들듯
걍 모던하게 다형성 구현하는 수단임
알았다 고마워 - 훈다리 훈다리