14

据我所知,类似List或的特征Seq在 Scala 标准库中实现,而不是语言本身的一部分。

不过,有一件事我不明白:一个具有可变参数函数的语法,看起来像

def foo(args: String*) = ...

在内部,一个人可以访问args,它将是一个Seq.

我不清楚是否:

  • Seq被认为是一种足以作为语言的一部分出现的特殊数据结构,或者
  • 这里的*符号是一种更通用的语法的特例,它设法避免对具体数据结构接口的任何引用。

有谁知道哪一个是正确的解释?

4

2 回答 2

15

在语言和库之间确实有点“模糊”。Scala 语言规范 v2.9 在§4.6.2 重复参数中声明:

参数部分的最后一个值参数可以用“*”作为后缀,例如(..., x:T *)。方法内部这种重复参数的类型就是序列类型scala.Seq[T]

因此,当您使用重复参数时,假定它scala.Seq在运行时可用(应该是这种情况,因为它是标准库的一部分)。

于 2012-08-13T10:02:33.543 回答
2

我认为这是第一个。语言要求存在几种类型,尽管它们实际上并不是语言的一部分。使用 Seq,您找到了一个。

于 2012-08-13T09:56:18.660 回答