Scala中的forSome关键字是什么?

时间:2012-02-25 14:43:33

标签: scala

我找到了以下代码段:

List[T] forSome { type T }

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

我用谷歌搜索了它,但发现了很少关于forSome的文件。它是什么意思,我在哪里可以获得一些文件?

2 个答案:

答案 0 :(得分:51)

forSome关键字用于定义Scala中的存在类型。这个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这是我从这里得到这个例子的地方。

答案 1 :(得分:3)

我不知道Scala,但你的问题引起了我的兴趣并开始使用Google搜索。

我在Scala's changelog中找到了:

  

“现在可以使用new关键字定义存在类型   forSome。存在类型的格式为T forSome {Q},其中Q为a   值序列和/或类型声明。 “