据我所知,像List
或Seq
这样的特征是在Scala标准库中实现的,而不是语言本身的一部分。
但有一件事我不明白:一个有可变函数的语法,看起来像
def foo(args: String*) = ...
在内部,其中一个人可以访问args
,它将是Seq
。
我不清楚是否:
Seq
被视为一种特殊的数据结构,足以作为语言的一部分出现,或*
符号是一种更通用语法的特例,它设法避免对具体数据结构接口的任何引用。有谁知道哪一个是正确的解释?
答案 0 :(得分:15)
在语言和图书馆之间确实有些模糊。 Scala语言规范v2.9中的§4.6.2重复参数:
参数部分的最后一个值参数可以以“*”为后缀,例如(..., x:T *)。然后,方法中此类重复参数的类型为序列类型
scala.Seq[
T]
。
因此,当您使用重复参数时,假设scala.Seq
在运行时可用(应该是这种情况,因为它是标准库的一部分)。
答案 1 :(得分:1)
我认为这是第一个。语言要求存在几种类型,尽管它们实际上并不是语言的一部分。有了Seq,你找到了一个。