質問
次の方法を見つけようとして髪を引き裂いています:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
o
と os
Seq
でメソッドを別々に宣言しなければならない理由があります。基本的に、単一のオブジェクトパラメーター( List
型)で呼び出されるformatメソッドになります。試行:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, (o :: List(os:_*))).toArray )
}
型エラーを表示します:
found: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 : _* ) )
ロケール*のサポートはありませんが、私は後者を非常に好みます。
- Scala 2.8では、RichString形式のロケールがサポートされています。
所属していません StackOverflow