java.lang.String#format のように可変長引数をとるものです。public static String format(String format, Object... args) 
scala.collection.immutable.StringLike の format みたいなものですね。def format (args: Any*): String
object Foo {
  def foo(format: String, args: AnyRef*): String = java.lang.String.format(format + " - foo", args)
  def main(args: Array[String]) {
    println(foo("%s", "Fizz"))
    println(foo("%s, %s", "Fizz", "Buzz"))
  }
}
println の出力結果は意図とは異なり、2つめの println では例外が発生します。出力結果は以下のようになります。WrappedArray(Fizz) - foo
java.util.MissingFormatArgumentException: Format specifier 's'
--- snip ---
java.lang.String#format の引数に可変長引数ではなく WrappedArray という型で渡っているため意図した結果になっていないようです。以下のようにすることで可変長引数のまま渡すことが出来ました。
object Foo {
  def foo(format: String, args: AnyRef*): String = java.lang.String.format(format + " - foo", args: _*)
  def main(args: Array[String]) {
    println(foo("%s", "Fizz"))
    println(foo("%s, %s", "Fizz", "Buzz"))
  }
}
 
0 件のコメント:
コメントを投稿