Scala中的forSome关键字是什么?

Fre*_*ind 69 scala

我找到了以下代码片段:

List[T] forSome { type T }
Run Code Online (Sandbox Code Playgroud)

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

我用Google搜索了一下,但发现的文件很少forSome.它是什么意思,我在哪里可以获得一些文件?

Asu*_*awa 52

forSome关键字用于在Scala中定义存在类型.这个Scala 词汇表页面解释了它们是什么.我无法在Scala文档中找到一个详细解释它们的地方,所以这里有一篇我在谷歌上发现的博客文章,解释它们是如何有用的.

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

总结一下我链接的一些帖子,当你想要操作某些东西但不关心其中的类型细节时,存在类型是有用的.例如,您希望对数组进行操作但不关心什么类型的数组:

def printFirst(x : Array[T] forSome {type T}) = println(x(0)) 
Run Code Online (Sandbox Code Playgroud)

您还可以使用方法上的类型变量:

def printFirst[T](x : Array[T]) = println(x(0))
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,您可能不想添加类型变量.您还可以向类型变量添加绑定:

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

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