Я хотел бы получить в качестве знака параметр типа параметра типа этого признака. не добавляя этот параметр типа «второго порядка» в качестве другого параметра «первого порядка» для этого признака. Следующее иллюстрирует эту проблему:Доступ к параметру типа параметра-типа
sealed trait A; sealed trait A1 extends A; sealed trait A2 extends A
trait B[ ASpecific <: A ] { type ASpec = ASpecific }
trait D[ ASpecific <: A ] extends B[ ASpecific ]
trait C[ +BSpecific <: B[ _ <: A ]] {
def unaryOp : C[ D[ BSpecific#ASpec ]]
}
def test(c: C[ B[ A1 ]]) : C[ D[ A1 ]] = c.unaryOp
тест не пройден для компиляции, потому что по-видимому, имеет c.unaryOp результат типа C [D [А]], а не C [D [A1]], что указывает на ASpec является просто ярлыком для _ <: A и не относится к определенному параметру типа.
два типа-параметра Решение простое:
sealed trait A; sealed trait A1 extends A; sealed trait A2 extends A
trait B[ ASpecific <: A ]
trait D[ ASpecific <: A ] extends B[ ASpecific ]
trait C[ ASpecific <: A, +BSpecific <: B[ ASpecific ]] {
def unaryOp : C[ ASpecific, D[ ASpecific ]]
}
def test(c: C[ A1, B[ A1 ]]) : C[ A1, D[ A1 ]] = c.unaryOp
, но я не понимаю, почему я должен загромождать мой источник этой второй, явно избыточной, параметр. нет способа извлечь его из признака B?
У меня есть лучший взгляд ... – pedrofurla
Нет успеха до сих пор ... :( – pedrofurla