반환 유형이 다른 메소드를 오버로드 할 수 없다는 것을 알고 있습니다.오버로드 제한 (여러 유형의 특성 구현)에 대한 작업
trait MultiReader {
implicit object RB extends Reader[B] { ... }
implicit object RC extends Reader[C] { ... }
doSomethingB()
doSomethingC()
}
: 똑똑하고 내 말은 효율적으로
trait Reader[A] { def read(in: java.io.DataInput): A }
trait B; trait C
def doSomethingB()(implicit r: Reader[B]) =()
def doSomethingC()(implicit r: Reader[C]) =()
trait MultiReader extends Reader[B] with Reader[C] { // not possible
implicit me = this
doSomethingB()
doSomethingC()
}
, 나는이 같은 혼란과 불필요한 내부 클래스 세대를 피하기 위해 싶습니다 그러나 나는 어떤 스마트 전략이 상황에 효율적으로 대처하기 위해이 있는지 궁금합니다
편집
부분적인 해결책입니다. 나는 영감을 얻은 마지막 날에 Miles Sabin이 this gist을 다시 읽었습니다.
type Tagged[U] = { type Tag = U }
type @@[T, U] = T with Tagged[U]
trait Reader[A] { def read(in: java.io.DataInput @@ A): A }
를 그리고이 작품 : 그래서 다음과 같은 작업을 수행 할 수
trait MultiReader {
def read(in: java.io.DataInput @@ B): B
def read(in: java.io.DataInput @@ C): C
}
을하지만 상속이 다소 여전히 분류됩니다
trait MultiReader extends Reader[B] with Reader[C]
을 ("self-type MultiReader does not conform to Reader[B]'s selftype Reader[B]"
실패).