55

我正在撕扯头发,试图弄清楚如何执行以下操作:

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

我必须用 ano和 anos Seq分别声明方法是有原因的。基本上,我最终得到了使用单个对象参数(类型List )调用的格式方法。尝试:

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

给我类型错误:

找到:数组[任何]

需要 Seq[java.lang.Object]

我尝试过强制转换,它编译但失败的原因与第一个示例几乎相同。当我尝试

println(String.format(msg, (o :: List(os:_*)) :_* ))

这无法编译隐式转换歧义(any2ArrowAssocany2stringadd

4

2 回答 2

67
def foo(msf: String, o: AnyRef, os: AnyRef*) = 
  println( String.format(msf, (o :: os.toList).toArray : _* ))
于 2009-06-17T18:37:22.017 回答
13
def foo(msf: String, o: AnyRef, os: AnyRef*) =
  println( String.format(msf, o :: os.toList : _* ) )

或者

def foo(msf: String, o: AnyRef, os: AnyRef*) =
      println( msf format (o :: os.toList : _* ) )

我更喜欢后者,尽管它不支持 locale*。

  • Scala 2.8 确实支持 RichString 格式的语言环境。
于 2009-06-18T19:46:32.703 回答