2012-02-25 8 views
63

私は次のコードスニペットを見つけました:ScalaのforSomeキーワードは何ですか?

List[T] forSome { type T } 

forSomeは方法のように見えますが、私の友人は、それがキーワードだ私に言いました。

私はそれを見つけましたが、forSomeに関するドキュメントはほとんど見つかりませんでした。それはどういう意味ですか、そしてどこでそれについての文書を入手できますか?

答えて

43

forSomeキーワードは、Scalaの実在型を定義するために使用されます。 Scala glossaryのページには、その内容が説明されています。 Scalaのドキュメントで詳細を説明する場所を見つけることができなかったので、hereは、Googleがどのように役立つかを説明したブログ記事です。

更新:では、存在タイプの正確な定義を見つけることができますが、それはかなり密集しています。

私がリンクしている投稿のいくつかを要約すると、実在するタイプは、何かを操作したいが、そのタイプの詳細を気にしないときに便利です。たとえば、配列を操作したいがを気にしない、アレイの種類

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

forSomeは、「Don Giovanni」リリースでの削除の予定です:https://www.scala-lang.org/news/roadmap-next.html –

3

私はScalaを知らないが、あなたの質問は私の関心を集めて、グーグルを始めた。

私は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 –

関連する問題