2012-02-25 80 views
63

我發現下面的代碼片段:Scala forSome關鍵字是什麼?

List[T] forSome { type T } 

forSome看起來像一個方法,但我的朋友告訴我,這是一個關鍵字。

我使用了它,但發現了幾個關於forSome的文檔。這是什麼意思,我在哪裏可以得到一些關於它的文件?

回答

43

forSome關鍵字用於定義Scala中的存在類型。有這個斯卡拉glossary頁面解釋他們是什麼。我無法在Scala文檔中找到詳細解釋它們的地方,因此here是我在Google上發現的一篇博客文章,解釋了它們的用途。

更新:您可以在Scala specification中找到存在類型的精確定義,但它非常密集。

要總結一些我鏈接到的帖子,存在類型在你想操作某些東西但不關心其中的類型細節時非常有用。例如,要在數組操作但不關心什麼樣數組:

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

,你同樣可以做到與方法的類型變量:

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

但你在某些情況下可能不想添加類型變量。您還可以添加綁定到該類型的變量:

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

另請參閱this blog post這是我得到了這個例子。

+0

@JanekBogucki上述鏈接無效。 – jpcooper 2016-10-25 16:38:17

+0

http://www.scala-lang.org/news/roadmap-next.html - 「for some syntax is eliminated。」 – 2016-10-27 09:00:30

+0

forSome將在「Don Giovanni」發行版中刪除:https://www.scala-lang.org/news/roadmap-next.html – 2017-01-27 10:57:10

3

我不知道斯卡拉,但你的問題拿起我的興趣,並開始谷歌搜索。

我發現,在Scala's changelog

「現在可以使用新的關鍵字 forSome定義生存類型的存在的類型的形式T forSome {Q}其中Q是一個有價值的 序列和/或類型聲明「。

+5

有些信息也可以在[Scala規格](http://www.scala-lang.org/docu/files/ScalaReference.pdf)中找到,第26頁 – 2012-02-25 14:49:46

+1

當前規格:http://www.scala -lang.org/files/archive/spec/2.11/03-types.html#existential-types – 2014-09-30 21:15:17