使用Scala的可变参数
我正在试图弄清楚如何做到以下几点:
def foo(msf: String, o: Any, os: Any*) = { println( String.format(msf, o :: List(os:_*)) ) }
有一个原因,我必须分别用o
和os
声明方法。 基本上,我结束了与单个对象参数( List
types)调用的格式方法。 尝试:
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:_*)) :_* ))
这无法用隐式转换歧义进行编译( any2ArrowAssoc
和any2stringadd
)
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格式的语言环境支持。