次のことを行う方法を理解しようとして、髪を引き裂いています。
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
o
メソッドを anと an でos
Seq
別々に宣言しなければならないのには理由があります。基本的に、(タイプの) 単一のオブジェクト パラメーターで呼び出される format メソッドで終了します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
)