rand로 벡터 셔플하는 예제 보는데
rand::shuffle(&mut v) 이런게 아니라
v.shuffle()하고 있길래 어케했나 보니 SliceRandom 트레잇 use한거네
어떤 트레잇을 use하고 있나 찾아봐야하네;;
rand로 벡터 셔플하는 예제 보는데
rand::shuffle(&mut v) 이런게 아니라
v.shuffle()하고 있길래 어케했나 보니 SliceRandom 트레잇 use한거네
어떤 트레잇을 use하고 있나 찾아봐야하네;;
반대로 코드에 어떤 use도 없으면 읽는 사람이 어느 라이브러리 어느 trait에 있는 코드인지 어떻게 암
그런 과정을 거쳐야하는 트레잇이 불편하다는거 아닌가? 뭔가를 임포트해야하는데 그게 효력을 발휘하는 과정이 자유함수대비 직관적이지 않다는거
임포트 자체가 불편하다는게 아니라
그냥 좀 생소해서 그렇게 보이는거 같은데.. 트레잇 주 용도는 그런 확장 메소드 추가하는게 아니라 제네릭에 붙이는거
SliceRandom trait이 아니라 그냥 slice 받는 함수만 있으면 확장하기 힘듦 뭐 이건 api 설계할때 고민할 문제인데 단순히 정확한 위치를 알리고 싶은거면 SliceRandom::shuffle(&mut v) 해도 되잖아 실제로 이렇게 쓰는 경우도 종종 있고
rand 패키지에 대한 지식이 없는 상태에서 코드를 봤을때 rand::shuffle이라는 코드를 보면 아 rand 패키지에서 셔플해주는 함수를 제공하는구나 하고 바로 알지만 vector.shuffle이라는 코드를 보면 vector에 원래 있는 메소드인가? 아니면 트레잇에 딸려나오는 구현일텐데 어떤 트레잇인가? 이런 과정이 추가되기는 하지
근데 뭐 실질적으로는 되게 사소한 단점인거 같음 장점이 워낙 많아보여서
타입추론 오질라게써서 처음코드읽을때 좀헤메긴함