2016-09-22 3 views
0

나는 익명의 내부 클래스를 가지고 있으며, 생성자에서 (익명) 외부 클래스에 액세스하려고합니다. 그래서이 방법을 구현하고 싶습니다 :스칼라 : 생성자의 내부 클래스에서 외부 클래스 가져 오기

new Outer { 
    new Inner { 

    } 
} 

class Outer { 

} 

class Inner { 
    def outerClass: Outer = ??? 
} 
+0

스택 추적 마법 없이는 불가능합니다. 어쩌면 우리가 당신의 문제에 대한 더 나은 해결책을 제안 할 수 있을까요? – talex

+0

암시 적 매개 변수를 사용하여이 작업을 시도했지만 실패했습니다.하지만 아마도 사용 가능합니까? –

+0

나는이 일을함으로써 다른 문제를 해결하려고 노력한다고 믿습니다. 그것이 사실이라면, 우리에게 설명하십시오. 어쩌면 그것은 더 나은 해결책 일 것입니다. – talex

답변

1

당신은 쉽게 충분이 사용 implicits을 수행 할 수 있습니다 (I는 모두 OuterInner 수정할 수 있습니다하지만, 가정을 사용하여 코드는 질문처럼 보일 것입니다). 선언 :

class Outer { 
    implicit def o: Outer = this 
} 

class Inner(implicit val outerClass: Outer) { 
} 

사용법 :

new Outer { 
    new Inner { 
    // can use outerClass here 
    } 
} 

또는

new Outer { 
    val inner = new Inner { 

    } 

    // inner.outerClass 
} 

그리고 나는이 DSL을위한 유용한 상상하지만 (r에 API의 사용자가) 실제로 처음 하시겠습니까 될 수 있습니다!

2

이 접근법에 대해 말한 것은 무엇입니까?

new Outer { self => 
    new Inner(self) { 

    } 
} 

class Outer { 
} 

class Inner[A](outerClass:A) { 
    println("CLASS: " + outerClass.getClass) 
} 
관련 문제