2017-12-27 11 views
0

이 코드의 반환 유형으로 Self::OutputInt256 이상 사용하면 어떤 이점이 있습니까?구체적인 구현 유형과 비교하여 연관된 유형을 사용하면 어떤 이점이 있습니까?

impl Add for Int256 { 
    type Output = Int256; 

    fn add(self, v: Int256) -> Self::Output { 
     // ... 
    } 
} 

impl Add for Int256 { 
    type Output = Int256; 

    fn add(self, v: Int256) -> Int256 { 
     // ... 
    } 
} 
+2

사실, 완전히 순수한 문체입니다. 어쩌면 그것은 의도를 더 잘 전달할 수도 있고, 특성 정의에서 함수 서명을 복사 할 때 입력 작업을 덜해야 할 수도 있습니다. –

답변

1

컴파일러의 관점에서 두 개의 서명 사이에는 차이가 없다, 그래서 결정은 읽고 코드를 이해하는 인간에 더 적합한 모두에 대해 될 것입니다.

일반적으로 구체 유형이 아닌이 연결된 을 선호합니다.

이 특징은 Iterator 특성의 구현에서 나타납니다. 부울 위에 반복자를 노출하는 유형이 있다고 가정합니다.

impl Iterator for MyBits { 
    type Item = bool; 

    fn next(&mut self) -> ??? { 
     /* ... */ 
    } 
} 

??? 위해 우리는 Option<Self::Item> 또는 Option<bool> 중 하나를 넣을 수 있습니다. 이 코드를 빨리 감추는 사람은 반환 유형의 의미 (즉, 반복이있는 경우)가 더 잘 포착되기 때문에 더 쉬운 시간은 Option<Self::Item>입니다. 만약 우리가 Option<bool>이라고 쓰고 싶다면 그 의미는 덜 자명합니다 - 어쩌면 부울은 남은 아이템이 있는지 여부를 알 수 있습니다 ...?