문제

스택 오버플로 질문보다 좀 더 구체적입니다. 실존형이란 무엇인가?, Scala와 Scala의 차이점은 무엇입니까? 실존 유형 그리고 자바의 와일드카드, 바람직하게는 몇 가지 예시를 사용하는 것이 좋습니다.

지금까지 내가 본 모든 것에서 그들은 꽤 동등한 것 같습니다.

몇 가지 참고자료.마틴 오더스키 그들을 언급한다;구글의 내 질문에 대한 최고 히트작:

미주리: 원래 와일드카드 디자인...실존 유형에서 영감을 받았습니다.사실 원본 논문에는 실존 유형의 인코딩이 있었습니다.그런데 실제 최종 디자인이 Java로 나왔을 때 이 연결이 약간 끊어졌습니다.

도움이 되었습니까?

해결책

이것은 Scala 사용자 메일 링리스트에 대한 Martin Odersky의 답변입니다.

원래의 Java 와일드 카드 유형 (Igarashi 및 Viroli의 Ecop Paper에 설명 된 바와 같이)은 실제로 실존 유형의 속기였습니다. 나는 Wild FJ의 Fool '05 논문에서 Wildcards의 최종 버전이 실존 적 유형과 약간의 차이를 가지고 있다고 들었습니다. 나는 어떤 의미에서 정확히 알지 못할 것입니다 (그들의 형식주의는 고전적인 실존 유형에서 너무 멀리 떨어져있어 차이를 정확히 찾아 낼 수 있습니다), 아마도 야생 FJ 용지를주의 깊게 읽으면 약간의 빛을 비출 것입니다.

그래서 Scala 실존 유형과 Java 와일드 카드는 동등한 것 같습니다.

다른 팁

그들의 주요 목적이 Java의 와일드 카드와 상호 작용하기 때문에 그것들은 동등해야합니다.

그것들은 매우 유사하지만 Scala의 실존 유형은 더 강력해야합니다. 예를 들어, Scala의 실존 유형은 상단 및 하부 경계 일 수 있지만 Java의 와일드 카드는 상단 본드 일 수 있습니다.

예를 들어 스칼라에서 :

scala> def foo(x : List[_ >: Int]) = x
foo: (x: List[_ >: Int])List[Any]

Foo는 int의 하한이있는 매개 변수 목록을 가져옵니다.

Martin Odersky의 훨씬 더 자세한 답변 (나머지는 찾을 수 있음) 여기):

스칼라에는 본질적으로 세 가지에 대한 실존 유형이 필요합니다.첫 번째는 우리가 자바의 와일드 카드를 이해해야한다는 것입니다. 그리고 실존 유형은 우리가 그들에 대한 의미입니다.두 번째는 우리가 Java의 원시 유형을 이해해야한다는 것입니다. 도서관은 여전히 ​​도서관, 미지급 유형에 있기 때문입니다.java.util.list와 같은 Java Raw 유형을 얻으면 요소 유형을 모르는 목록입니다.그것은 또한 실존 유형으로 스칼라로 표시 될 수 있습니다.마지막으로, 우리는 높은 수준의 스칼라에서 VM에서 일어나는 일을 설명하는 방법으로 실존 유형이 필요합니다.Scala는 Java와 마찬가지로 제네릭의 Erasure 모델을 사용하므로 프로그램이 실행될 때 더 이상 유형 매개 변수가 표시되지 않습니다.우리는 Java와 상호 작용해야하기 때문에 삭제해야합니다.그러나 우리가 반성하거나 VM에서 무슨 일이 일어나는지 표현하고 싶을 때 어떻게됩니까?우리는 스칼라에있는 유형을 사용하여 JVM이하는 일을 대표 할 수 있어야하며, 실존 적 유형을 통해 그렇게 할 수 있습니다.그들은 당신이 당신이 그러한 유형의 특정 측면을 모르는 유형에 대해 이야기 할 수 있도록합니다.

그만큼 List[_] 표기법 (다른 답변이 지적한대로 Java의 더 강력한 아날로그입니다. List[?])는 퇴화 된 사례입니다 더 일반적인 개념 스칼라의 실존 유형.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top