Я пытаюсь использовать этот вид кода:значения абстрактных типов членов
trait Outer {
type Inner
def f(x:Inner) : Void
}
object test {
def apply(o: Outer, i : Outer#Inner) : Void =
o.f(i)
}
я получил ошибку в предпоследней строке:
type mismatch; found : i.type (with underlying type Outer#Inner) required: o.Inner
Если я изменяю применить Подпись к
def apply(o: Outer, i : o.Inner) : Void
тогда я получил ошибку:
illegal dependent method type
Возможно ли, чтобы этот кусок кода работал?
Ну, это работает, огромное спасибо! Но imo o.Inner намного уродливее, чем Outer # Inner. Не могли бы вы объяснить, какой смысл использовать бывший, а не последний? Компилятор может выполнять только статические проверки, поэтому o.Inner должен быть равен o.type # Inner, который должен быть (статически) равен Outer # Inner. Я что-то упускаю? –