2010-02-03 4 views
9

스칼라 언어 사양 (3.2.10 존재 유형)의 값보다 실재 정량화가 발생했습니다.존재하는 정량화 값보다

x: y.Inner forSome{val y : Outer} 

누군가 사용 사례가 있습니까?

T forSome {val x: S}T forSome { type t <: S with Singleton }으로 정의됩니다. Singletron 특성은 Specification (3.2.1 Singleton Types)에 언급되어 있지만 Scaladoc에서는 찾을 수 없습니다. 정의 된 위치는 어디입니까?

+0

싱글 톤 외에도 : http://stackoverflow.com/questions/292274/what-is-an-existential-type – Dario

답변

12

형식 이름에서 암시하는 내부 클래스와 함께 유용합니다. 예를 들어 A Tour of Scala: Inner Classes에 정의 된 그래프 및 노드 클래스를 참조하십시오. 값에 대한 존재하는 부량은 불특정 그래프의 노드 유형을 쓰는데 사용됩니다.

type SomeNode = g.Node forSome { val g: Graph } 

두 그래프를 같은 그래프에서 가져와야하는 인수로 사용하는 방법을 원할 때 유용 할 수 있습니다. 당신이

val g1 = new Graph 
val g2 = new Graph 

다음 이러한

somethingWithTwoNodes(g1.newNode, g1.newNode) 
somethingWithTwoNodes(g2.newNode, g2.newNode) 
를 컴파일 할 경우

그런 N.에서 재귀 어떤 종류가있다 생각하기 때문에 2.7 메소드 정의를 채택하지 않도록

def somethingWithTwoNodes[N <: g.Node forSome { val g: Graph }](n1: N, n2: N) = (n1,n2) 

하지만 이들은 없습니다

somethingWithTwoNodes(g1.newNode, g2.newNode) 
somethingWithTwoNodes(g2.newNode, g1.newNode) 

싱글 톤 특성은 일반적인 방식으로 정의되지 않았습니다. 즉, 클래스 파일이 없습니다. Any, AnyVal, AnyRef 및 Null 유형과 같습니다. 이 다른 유형과 함께 src/compiler/scala/tools/nsc/symtab/Definitions.scala에 정의되어 있지만 매우 유용한 정보라고 생각됩니다. 그것은 또한 특성이나 클래스를 정의 할 때 그것을 혼합 할 수 없다는 것을 의미하는 최종 특성 인 이상한 짐승입니다. 실제로 컴파일러가 다른 유형과 고유하다고 말하는 유형의 인자입니다.

+0

감사합니다. Singleton이 정의 된 아이디어는 무엇입니까? –

+0

'경로 종속 형'이 아닌가요? – pedrofurla

0

this paper의 전반부는이 기술을 사용하여 스트림 유형을 만듭니다.

+0

다운로드가 작동하지 않는 것 같습니다. 다른 출처가 있습니까? –

관련 문제