【发布时间】:2012-03-15 17:48:14
【问题描述】:
我找到了以下代码sn-p:
List[T] forSome { type T }
forSome 看起来像一个方法,但我的朋友告诉我这是一个关键字。
我用谷歌搜索了它,但几乎没有找到关于 forSome 的文档。它是什么意思,我在哪里可以获得一些关于它的文件?
【问题讨论】:
标签: scala
我找到了以下代码sn-p:
List[T] forSome { type T }
forSome 看起来像一个方法,但我的朋友告诉我这是一个关键字。
我用谷歌搜索了它,但几乎没有找到关于 forSome 的文档。它是什么意思,我在哪里可以获得一些关于它的文件?
【问题讨论】:
标签: scala
我不了解 Scala,但您的问题引起了我的兴趣并开始使用 Google 搜索。
我发现在Scala's changelog:
"现在可以使用 new 关键字定义存在类型
forSome。存在类型具有T forSome {Q}的形式,其中Q是 值和/或类型声明的序列。 "
【讨论】:
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,这是我从中获得此示例的地方。
【讨论】: