
69
1
장
타입
146 | impl fmt::Display for rand::rngs::StdRng {
| ^^^^^^^^^^^^^^^^^^^^^^------------------
| | |
| | `StdRng` is not defined in the current crate
| impl doesn't use only types from inside the current crate
|
= note: define and implement a trait or new type instead
이렇게 제한하는 이유는 모호해질 위험이 있기 때문이다. 의존성 그래프(아이템
25
)에서 서로
다른 두 크레이트 모두 (예를 들어)
impl
fmt
::
Display
for
rand
::
rngs
::
StdRng
를 구
현하면, 컴파일러/링커는 둘 중 어느 것을 선택할지 알 수 없다.
그러면 곤란한 상황에 빠질 수 있다. 예를 들면 다른 크레이트에 있는 타입이 포함된 데이터를
직렬화할 때, 고아 규칙에 의해
impl
serde
::
Serialize
for
somecrate
::
SomeType
을 구
현할 수 없게 된다.
29
이와 달리 뉴타입 패턴은 현재 크레이트 안에 새로운 타입을 정의하기 때문에, 고아 규칙의 두
번째 부분이 적용된다. 따라서 외부 트레이트를 구현할 수 있다.
struct ...