Scala中的forSome关键字是做什么用的?


71

我发现以下代码片段:

List[T] forSome { type T }

forSome看起来像一个方法,但我的朋友告诉我,这是一个关键字。

我在Google上进行了搜索,但找不到有关的文件forSome。这是什么意思,我在哪里可以得到一些文件?

Answers:


55

forSome关键字用于Scala中定义生存类型。Scala的词汇表页面解释了它们是什么。我无法在Scala文档中找到详细解释它们的地方,因此是我在Google上发现的博客文章,其中解释了它们的有用性。

更新:您可以在Scala规范中找到存在类型的精确定义,但是它非常密集。

总结一下我链接到的一些文章,当您想对某物进行操作但不关心其中的类型细节时,存在性类型很有用。例如,您想对数组进行操作,但不关心哪种数组:

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

另请参阅此博客文章,这是我从中获得此示例的地方。



forSome计划在“ Don Giovanni”版本中删除:scala-lang.org/news/roadmap-next.html
Janek Bogucki

3

我不认识Scala,但是您的问题引起了我的兴趣,并开始使用Google搜索。

我发现在Scala的changelog中

“现在可以使用新的关键字来定义生存类型 forSome。一个存在类型的形式T forSome {Q},其中Q是的值和/或类型声明的序列。”


5
一些信息也可以在Scala Spec的第26页中找到
om-nom-nom

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.