我正在试图弄清楚如何做以下事情:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
我必须分别使用o
和os
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:_*)) :_* ))
这无法使用隐式转换歧义进行编译(any2ArrowAssoc
和any2stringadd
)
答案 0 :(得分:65)
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, (o :: os.toList).toArray : _* ))
答案 1 :(得分: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 : _* ) )
我更喜欢后者,虽然它没有语言环境*支持。