Scala:将Seq传递给var args函数
给定一个接受可变数量参数的函数,例如Scala:将Seq传递给var args函数,scala,Scala,给定一个接受可变数量参数的函数,例如 def foo(os: String*) = println(os.toList) 如何将一系列参数传递给函数?我想写: val args = Seq("hi", "there") foo(args) 显然,这不起作用。foo(args:*)起作用。序列中的每个元素都将用作一个参数,而不是作为一个参数应用序列。另请参见:上述函数是否有一个代码审查友好、不太容易让人头痛的名称args:*提供一个使其透明的api的一种方法是编写一个同名的代理函数foo,
def foo(os: String*) =
println(os.toList)
如何将一系列参数传递给函数?我想写:
val args = Seq("hi", "there")
foo(args)
显然,这不起作用。
foo(args:*)
起作用。序列中的每个元素都将用作一个参数,而不是作为一个参数应用序列。另请参见:上述函数是否有一个代码审查友好、不太容易让人头痛的名称args:*
提供一个使其透明的api的一种方法是编写一个同名的代理函数foo
,这使得转换。这样,您最初对foo
的调用就可以工作,而用户代码不必担心这一点。话虽如此,如果foo
需要一个像Seq
这样的集合,而不是像String
这样的原始类型,scala集合的不变性将妨碍对api的任何合理使用。就好像变量参数列表和标准库集合并没有被设计为除了香草之外的共同用例。@Richeek不幸的是,没有。只要稍微改变一下样式foo(args:*)
,可能就不那么神秘了(注意操作符之间增加的空间)。:
表示正在进行类型归属。是类型归属的一个特殊实例:vararg扩展。