質問

次の方法を見つけようとして髪を引き裂いています:

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形式のロケールがサポートされています。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top