2013-12-21 7 views
0

Как я понимаю, подпись def bar(x: X#Inner) требует просто любой экземпляр Inner для компиляции. Принимая во внимание, что foo(x: this.Inner) будет компилироваться только с тем же экземпляром класса Outer.Inner.Типы и типы, зависящие от пути

При чтении Scala in Depth, я ввел этот код в REPL, но я получаю ошибку времени компиляции.

scala> class Outer { 
    | trait Inner 
    |  def y = new Inner {} 
    | def foo(x: this.Inner) = null 
    | def bar(x: X#Inner) = null 
    | } 
<console>:11: error: not found: type X 
      def bar(x: X#Inner) = null 
        ^

Кроме того, что такое ошибка времени компиляции?

ответ

1

X в X#Inner относится к внешнему типу. У вас нет типа X в любом месте, это то, о чем точно говорит ошибка компилятора.

В вашем примере вы хотите обратиться к типу Outer вместо:

class Outer { 
    trait Inner 
    def foo(x: this.Inner) = ??? 
    def bar(x: Outer#Inner) = ??? 
} 
+0

спасибо, @ 0__. Из любопытства, почему вы написали 'def foo (x: this .Inner)' с пробелом между 'this' и' .Inner'? –

+1

@ Одержимость Кевином Мередитом с вертикальным выравниванием похожих линий :) –

0

X#Inner должен быть Outer#Inner, я думаю, что автор Scala in depth просто набран неверно в книге.

Смежные вопросы