使用Scala的可变参数

我正在试图弄清楚如何做到以下几点:

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

有一个原因,我必须分别用oos声明方法。 基本上,我结束了与单个对象参数( Listtypes)调用的格式方法。 尝试:

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

给我的types错误:

发现:Array [Any]

需要Seq [java.lang.Object]

我已经试过铸造,编译但失败的原因几乎与第一个例子相同。 当我尝试

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

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

 def foo(msf: String, o: AnyRef, os: AnyRef*) = println( String.format(msf, (o :: os.toList).toArray : _* )) 
 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 : _* ) ) 

我更喜欢后者,尽pipe它没有语言环境*支持。

  • Scala 2.8具有RichString格式的语言环境支持。
Interesting Posts