题
我正在抓狂地试图弄清楚如何执行以下操作:
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
)
解决方案
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 : _* ) )
我更喜欢后者,尽管它没有区域设置* 支持。
- Scala 2.8 确实支持 RichString 格式的区域设置。
不隶属于 StackOverflow