使用Scala的varargs

oxb*_*kes 54 scala variadic-functions

我正试图弄清楚如何做以下事情:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, o :: List(os:_*)) )
}
Run Code Online (Sandbox Code Playgroud)

有一个原因,我必须单独声明方法o和一个os Seq.基本上,我最终得到了使用单个对象参数(类型List)调用的格式方法.尝试:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, (o :: List(os:_*))).toArray )
}
Run Code Online (Sandbox Code Playgroud)

给我类型错误:

发现:数组[任意]

必需的Seq [java.lang.Object]

我尝试过编译,编译但失败的原因和第一个例子差不多.当我尝试

println(String.format(msg, (o :: List(os:_*)) :_* ))
Run Code Online (Sandbox Code Playgroud)

这无法使用隐式转换歧义进行编译(any2ArrowAssocany2stringadd)

Jam*_*Iry 65

def foo(msf: String, o: AnyRef, os: AnyRef*) = 
  println( String.format(msf, (o :: os.toList).toArray : _* ))
Run Code Online (Sandbox Code Playgroud)

  • 既然为什么需要阿雷?List是一个有效的输入:_*. (9认同)

Dan*_*ral 13

def foo(msf: String, o: AnyRef, os: AnyRef*) =
  println( String.format(msf, o :: os.toList : _* ) )
Run Code Online (Sandbox Code Playgroud)

要么

def foo(msf: String, o: AnyRef, os: AnyRef*) =
      println( msf format (o :: os.toList : _* ) )
Run Code Online (Sandbox Code Playgroud)

我更喜欢后者,虽然它没有语言环境支持.

  • Scala 2.8确实具有RichString格式的语言环境支持.