
62
이펙티브 러스트
이 제네릭 버전은 다음과 같이 호출할 수 있다.
if is_iana_reserved(42) {
// ...
}
이런 트레이트 바운드는
From
<
T
>
의 반사적 트레이트 구현이 더 적합하다. 다시 말해 이런 제
네릭 함수는 이미
IanaAllocated
인스턴스인 항목을 처리하므로 변환할 필요가 없다.
또한 러스트 코드가 타입끼리 암묵적으로 변환되는 것처럼 보이는 이유와 그 방법도 이 패턴을
통해 알 수 있다.
From
<
T
>
구현과
Into
<
T
>
트레이트 바운드를 조합하면 호출한 측에서 마술
처럼 변환되는 것처럼 보이면서 실제로는 안전하고 명시적인 변환을 수행하는 코드가 만들어
진다. 이 패턴은 레퍼런스 타입과 관련 변환 트레이트가 결합될 때 더욱 강력한 힘을 발휘한다
(자세한 내용은 아이템
8
에서 다룬다).
캐스트
러스트에서 제공하는
as
키워드를 사용하면 두 타입 사이를 명시적으로 캐스트
cast
할 수 있다.
as
키워드로 변환할 수 있는 타입은 사실 많지 않다. 사용자 정의 타입 중에서는
C
언어와 비
슷한 (즉, 연관된 정숫값만으로 구성된 )
enum
뿐이다. 그래도 일반 정수 변환에 대해서는
as
를
지원하고 있어서
into
()
대신 사용할 수 있다.
let x: u32 = 9;
let y = x as u64;
let z: u64 = x.into(); ...