2013-12-21 4 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__. 호기심에서, 왜''foo (x : this.Inner) '와'this'와'.Inner' 사이에 공백 문자를 썼습니까? –

+1

@KevinMeredith 비슷한 라인을 수직으로 정렬하는 것에 집착합니다 :) –

0

X#InnerOuter#Inner해야한다, 나는 Scala in depth의 저자는 단지 책에 잘못 입력 생각합니다.

관련 문제