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
在运行时可用(应该是这种情况,因为它是标准库的一部分).