Scala可变函数和Seq

And*_*rea 13 scala language-design variadic-functions data-structures

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

但有一件事我不明白:一个有类似可变函数的语法

def foo(args: String*) = ...
Run Code Online (Sandbox Code Playgroud)

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

我不清楚是否:

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

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

0__*_*0__ 15

这确实是语言和图书馆之间的"模糊".Scala语言规范v2.9在§4.6.2重复参数中说明:

参数部分的最后一个值参数可以以"*"为后缀,例如(...,x:T*).类型的方法的内部这样的重复参数的是则序列类型scala.Seq[Ť].

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