사례 유형의 유형을 추상적 유형으로 사용하려고합니다. 내가보고 놀랐습니다 (유사) 아래 코드는 컴파일 : 내 진짜 예 Foo
에서유형 바인드로 추상 유형을 구체적으로 설정하는 방법은 무엇입니까?
sealed abstract class Bar
case object BarOne extends Bar
case object BarTwo extends Bar
sealed abstract class Foo {
type A <: Bar
def f: A
}
object Foo {
object FooOne extends Foo {
type A = BarOne.type
val f = BarTwo
}
object FooTwo extends Foo {
type A = BarTwo.type
val f = BarOne
}
}
는 매개 변수화와 케이스 클래스로 사용됩니다. 그래서 나는 단지 A
을 타입 매개 변수로 만들 수 없습니다.
A
을 BarOne.type
으로 설정하면 f = BarTwo
은 어떻게 컴파일됩니까?
A
(f: A
)이 A <: Bar
으로 해석되는 이유는 무엇입니까?
의 각 개체 인스턴스에 대해 A
을 구체적으로 설정하는 방법이 있습니까?
저는 스칼라 2.11.8을 사용하고 있습니다.
업데이트 : FooOne
& FooTwo
컴파일에 def attributeType = ...
로 val attributeType = ...
를 교체 할 때가 실패 (예상대로).
는 실종'FooOne''에 Foo'를 확장하고'오타를 FooTwo'인가? 추가하면 컴파일되지 않기 때문입니다. –
@EndeNeu 그것은 감독이었습니다. 그리고 당신 말이 맞습니다. (예상대로) 컴파일되지 않습니다. 나는 실제 코드에 최대한 가깝게 보이도록 질문을 업데이트했다. 물론 위 코드가 컴파일되지 않고 코드가 컴파일되기 때문에 아무 쓸모가 없습니다. – muhuk
@muhuk 위 코드가 컴파일되지 않으면 컴파일 코드를 나타내지 않습니다. 정확한 질문이없는 한이 질문에 답할 수 없습니다. – Daenyth