2012-02-25 4 views
63

나는 다음과 같은 코드 발견 :스칼라의 forSome 키워드는 무엇입니까?

List[T] forSome { type T } 

forSome이 방법처럼 보이는,하지만 내 친구는 키워드의 나에게 말했다.

나는 그것을 검색했지만 forSome에 대한 몇 가지 문서를 찾았습니다. 그것이 의미하는 것은 무엇이며, 그것에 관한 문서를 어디에서 얻을 수 있습니까?

답변

43

forSome 키워드는 스칼라의 존재 유형을 정의하는 데 사용됩니다. 이 스칼라 glossary 페이지가 무엇인지 설명하고 있습니다. 나는 스칼라 문서에서 그들을 상세하게 설명하는 장소를 찾을 수 없었기 때문에, here은 그들이 유용한지를 설명하는 구글에서 찾은 블로그 기사이다.

업데이트 : 에서 실존 유형의 정확한 정의를 찾을 수 있지만 상당히 복잡합니다.

필자가 링크 된 게시물 중 일부를 요약하면, 실존 유형은 뭔가 조작하고 싶지만 그 유형의 세부 사항에 신경 쓰지 않을 때 유용합니다. 예를 들어, 배열에서 작동하고 싶지만 상관 없어 배열의 어떤 종류의 :

def printFirst[T](x : Array[T]) = println(x(0)) 

하지만 당신 : 당신은 또한 방법의 유형 변수로 할 수

def printFirst(x : Array[T] forSome {type T}) = println(x(0)) 

경우에 따라 유형 변수를 추가하지 않을 수도 있습니다. 또한 유형의 변수에 바인딩을 추가 할 수 있습니다

def addToFirst(x : Array[T] forSome {type T <: Integer}) = x(0) + 1 

또한 내가에서이 예제를 가지고 어디에있는 this blog post를 참조하십시오.

+0

@JanekBogucki 위 링크는 작동하지 않습니다. – jpcooper

+0

http://www.scala-lang.org/news/roadmap-next.html - "일부 구문이 삭제되었습니다." –

+0

for some은 "Don Giovanni"릴리스에서 삭제 예정입니다. https://www.scala-lang.org/news/roadmap-next.html –

3

스칼라에 대해서는 모르겠지만 귀하의 질문에 관심이 집중되고 인터넷 검색이 시작되었습니다.

Scala's changelog에 있다는 발견.

"새로운 키워드 forSome을 이용하여 실존 유형을 정의하는 것이 가능하게되는 존재 유형 Q 값의 시퀀스가 ​​형태 T forSome {Q}을 가지고 및/또는 형식 선언. "

+5

일부 정보는 [Scala Spec] (http://www.scala-lang.org/docu/files/ScalaReference.pdf)의 26 번째 페이지 –

+1

현재 스펙 : http : //www.scala에서 찾을 수 있습니다. -lang.org/files/archive/spec/2.11/03-types.html#existential-types –

관련 문제