https://ricardomartins.cc/2016/08/03/convenient_and_idiomatic_conversions_in_rust
Rust에서 타입을 conversion하는데에 사용되는 trait가 있습니다.
From<T>, Into<U>, TryFrom<T>, TryInto<U>, AsRef<U>, AsMut<U>
=> T가 원본 타입이고 U가 타겟이 되는 타입이라고 보면 된다.
From<T> for U
T라는 타입을 U으로 변경하는 trait
reflexive trait임. From<T> for T 의 경우 자기자신을 그대로 리턴한다.
실패하지 않는다.
From<T> for U를 구현하면 Into<U> for T도 같이 자동으로 구현된다.
Into<U> for T
T라는 타입을 U로 변경하는 trait
TryFrom<T>
From<T>와 같은데 변환에 에러가 있을 수 있는 경우 사용한다. 따라서, 결과가 Result<Self, Self::Error>이다.
TryInto<U>
TryFrom<T>와 같다고 보면 된다. 결과가 Result<T, Self::Error> 이다.
AsRef<U>
immutable reference를 다른 타입의 immutable reference로 변환한다.
AsMut<U>
mutable reference를 다른 타입의 mutable reference로 변환한다.
AsRef<U>와 AsMut<U>에는 generic implementation이 있다.
=> AsRef<U>나 AsMut<U>를 구현하고 있는 type에의 reference에 대한 구현으로서
&&&&vec이나 &&&& mut vec 같은 multiple-level deep reference를 &vec와 같게 만들어 준다.(왜 이렇게 되는건지 어떤 사용 예가 있는 건지 이해 못함ㅠㅠ)
댓글 없음:
댓글 쓰기