[SCALA] 스칼라 내부 클래스 유형을 참조
SCALA스칼라 내부 클래스 유형을 참조
DSL에의 모방 다형성 임베딩에 다음 코드 시도가 : 오히려 내부의 동작을 제공하는 것보다, 그것은 그것의 바깥 쪽 클래스의 useInner 방법으로 인코딩된다. 그 사용자가 내부 인스턴스에 대한 참조를 유지하는 경우에만이되도록 둘러싸는 방법을 추가했지만 항상 바깥 인스턴스를 얻을 수 있습니다. 이렇게함으로써, 특정 외부 인스턴스에서 모든 내부 인스턴스는 하나의 행동에 바인딩 (하지만 여기 수배).
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
그것은 컴파일하지 않고 스칼라 2.8에 대한 불평 :
type mismatch; found: sandbox.Outer#Inner
required: _81.Inner where val _81:sandbox.Outer
중첩 된 클래스와 스칼라의 투어 : 스칼라 프로그래밍에서 내부 클래스, 문제가 특정 외부 인스턴스에서 인수로 그 useInnerexpects 이너 인스턴스 것을 나에게 보인다.
어떻게이 문제를 해결하는 진정한 설명과는 무엇인가?
해결법
-
==============================
1.나는 내부는 형 this.Inner 같다 유형을 가정합니다. 아우터 # 내부는 외부 인스턴스 (경로가 아닌 종속 형) 독립적이다.
나는 내부는 형 this.Inner 같다 유형을 가정합니다. 아우터 # 내부는 외부 인스턴스 (경로가 아닌 종속 형) 독립적이다.
abstract class Outer { sealed class Inner { def enclosing = Outer.this } def useInner(x:Outer#Inner) : Boolean } def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
-
==============================
2.당신이 설명하는대로 문제는 useInner 특정 외부 인스턴스의 내부를 기대하고 있다는 것입니다. 반환에게 일반적인 외부를 둘러싸고 있기 때문에, 정말 내가 아는 것을 모두 함께 묶어 할 수있는 방법이 없습니다.
당신이 설명하는대로 문제는 useInner 특정 외부 인스턴스의 내부를 기대하고 있다는 것입니다. 반환에게 일반적인 외부를 둘러싸고 있기 때문에, 정말 내가 아는 것을 모두 함께 묶어 할 수있는 방법이 없습니다.
당신은하지만, 그것을 강제 할 수 있습니다 :
def toBoolean(x: Outer#Inner): Boolean = { val outer = x.enclosing outer.useInner(x.asInstanceOf[outer.Inner]) }
-
==============================
3.또한이처럼 멤버를 정의 할 수 있습니다 :
또한이처럼 멤버를 정의 할 수 있습니다 :
def useInner(x:Outer#Inner) : Boolean
또는 당신은 다음과 같이 쓸 수 있습니다 :
abstract class Outer { class InnerImpl { def enclosing = Outer.this } final type Inner = Outer#InnerImpl def useInner(x:Inner) : Boolean }
from https://stackoverflow.com/questions/2183954/referring-to-the-type-of-an-inner-class-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 선물은 프로그램 종료 전에 실행되지 않습니다 (0) | 2019.11.17 |
---|---|
[SCALA] 스칼라 - 발스의 초기화 순서 (0) | 2019.11.17 |
[SCALA] 어떻게지도의 데이터 집합을 만드는 방법? (0) | 2019.11.17 |
[SCALA] 어떻게 스칼라를 사용하여 스파크 2.1 밀리 초와 타임 스탬프에 밀리 세컨드의 문자열 열을 변환하는? (0) | 2019.11.17 |
[SCALA] 황조롱이 함수형 프로그래밍 디자인 패턴의 부가가치는 무엇인가? (스칼라) (0) | 2019.11.17 |