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

我发现了以下代码片段:

List[T] forSome { type T }

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

我谷歌了一下,但是找到了一些关于 forSome的文档。这是什么意思,我在哪里可以得到一些有关它的文件?

13679 次浏览

我不知道 Scala,但是你的问题引起了我的兴趣,并且开始在谷歌上搜索。

我在 斯卡拉的变更日志中发现:

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

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))

但是在某些情况下可能不希望添加 type 变量。还可以向 type 变量添加绑定:

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

还可以看到 这篇博文,这是我得到这个例子的地方。