我發現下面的代碼片段:Scala forSome關鍵字是什麼?
List[T] forSome { type T }
的forSome
看起來像一個方法,但我的朋友告訴我,這是一個關鍵字。
我使用了它,但發現了幾個關於forSome
的文檔。這是什麼意思,我在哪裏可以得到一些關於它的文件?
我發現下面的代碼片段:Scala forSome關鍵字是什麼?
List[T] forSome { type T }
的forSome
看起來像一個方法,但我的朋友告訴我,這是一個關鍵字。
我使用了它,但發現了幾個關於forSome
的文檔。這是什麼意思,我在哪裏可以得到一些關於它的文件?
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這是我得到了這個例子。
我不知道斯卡拉,但你的問題拿起我的興趣,並開始谷歌搜索。
我發現,在Scala's changelog:
「現在可以使用新的關鍵字
forSome
定義生存類型的存在的類型的形式T forSome {Q}
其中Q
是一個有價值的 序列和/或類型聲明「。
有些信息也可以在[Scala規格](http://www.scala-lang.org/docu/files/ScalaReference.pdf)中找到,第26頁 – 2012-02-25 14:49:46
當前規格:http://www.scala -lang.org/files/archive/spec/2.11/03-types.html#existential-types – 2014-09-30 21:15:17
@JanekBogucki上述鏈接無效。 – jpcooper 2016-10-25 16:38:17
http://www.scala-lang.org/news/roadmap-next.html - 「for some syntax is eliminated。」 – 2016-10-27 09:00:30
forSome將在「Don Giovanni」發行版中刪除:https://www.scala-lang.org/news/roadmap-next.html – 2017-01-27 10:57:10