Scala可变函数和Seq

时间:2012-08-13 09:51:18

标签: scala data-structures language-design variadic-functions

据我所知,像ListSeq这样的特征是在Scala标准库中实现的,而不是语言本身的一部分。

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

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

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

我不清楚是否:

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

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

2 个答案:

答案 0 :(得分:15)

在语言和图书馆之间确实有些模糊。 Scala语言规范v2.9中的§4.6.2重复参数

  

参数部分的最后一个值参数可以以“*”为后缀,例如(..., x:T *)。然后,方法中此类重复参数的类型为序列类型scala.Seq[ T ]

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

答案 1 :(得分:1)

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