如何在Scala中添加另一个参数时传递可变参数?

gre*_*man 5 arguments scala parameter-passing

考虑这样的方法:

def clearlnOut(coll : Any*)
{
  clearOut(coll:_*,"\n") // error
}
def clearOut(coll : Any*)
{
  ...
Run Code Online (Sandbox Code Playgroud)

编译器说:

错误:此处不允许使用`:_*'注释(此类注释仅允许在*参数的参数中使用)

现在我很困惑.很明显使用可变参数,如何正确传递这种增强的"集合"?

Tom*_*icz 6

试试这个:

def clearlnOut(coll : Any*) {
  clearOut(coll ++ "\n")
}
Run Code Online (Sandbox Code Playgroud)

更新:@Rex Kerr建议的更好的版本(见下面的评论):

def clearlnOut(coll : Any*) {
  clearOut((coll :+ "\n"): _*)
}
Run Code Online (Sandbox Code Playgroud)

  • 你真的想要`++`吗?那将'\n`添加为一个字符(并将"foo"添加为三个独立的一个字符元素).好像`:+`是要走的路.另外,你不想在它上面添加`:_*`吗?否则你得到一个'Seq [Seq [Any]]`,一个额外的嵌套级别. (4认同)