Я пытаюсь ниже со Scala 2.10.0-M1:типа при использовании зависимых типов методов и проекции типа
trait Container {
type X
}
class Test[C <: Container](val c: C) {
def foo(x: c.X): C#X = x // this compiles fine
def bar(x: C#X): c.X = x // this does not compile
}
Проблема состоит в том же, при использовании этой формы:
def bar[C <: Container](c: C)(x: C#X): c.X = x
Я действительно не понимаю, почему foo
компилируется в то время как bar
нет.
Я считаю, что c.X
и C#X
здесь должны быть одинаковыми.
Кроме того, я не понимаю, сообщение об ошибке:
[error] found : x.type (with underlying type C#X)
[error] required: Test.this.c.X
[error] possible cause: missing arguments for method or constructor
[error] def bar(x: C#X): c.X = x // this does not compile
Любая идея?
Это был в частности, проблема с дизайном, когда я хотел получить тип из зависимого от пути типа. Я создал [другой вопрос] (http://stackoverflow.com/questions/9065343/exposing-a-path-dependent-type-coming-from-a-singleton-type) для этого. – betehess