警告を表示する必要があることを誰かが言及する必要があります。
apm@mara:~$ skala -Ywarn-infer-any
Welcome to Scala version 2.11.0-20130524-174214-08a368770c (OpenJDK 64-Bit Server VM, Java 1.7.0_21).
Type in expressions to have them evaluated.
Type :help for more information.
scala> "abc".padTo(10, "*").mkString
<console>:7: warning: a type was inferred to be `Any`; this may indicate a programming error.
val res0 =
^
res0: String = abc*******
この方法で (それ自体) 何も問題がないことに注意してください。
たぶん、次のユースケースがあります:
scala> case class Ikon(c: Char) { override def toString = c.toString }
defined class Ikon
scala> List(Ikon('#'),Ikon('@'),Ikon('!')).padTo(10, "*").mkString
res1: String = #@!*******
またはそれ以上
scala> case class Result(i: Int) { override def toString = f"$i%03d" }
defined class Result
scala> List(Result(23),Result(666)).padTo(10, "---").mkString
res4: String = 023666------------------------
これはあなたのユースケースではないので、冗長で危険に満ちた API を使用したいかどうかを尋ねる必要があるかもしれません。
そのため、ダニエルの答えは正しいものです。彼の例のフォーマット文字列がなぜそれほど恐ろしいように見えるのかはわかりませんが、ほとんどの読み取り可能な文字列では、いくつかの場所で文字をフォーマットするだけでよいため、通常はより無害に見えます。
scala> val a,b,c = "xyz"
scala> f"$a is followed by `$b%10s` and $c%.1s remaining"
res6: String = xyz is followed by ` xyz` and x remaining
偽のフォーマッタを追加する必要がある 1 つのケースは、改行が必要な場合です。
scala> f"$a%s%n$b$c"
res8: String =
xyz
xyzxyz
インターポレーターは f"$a%n$b" を処理する必要があると思います。待ってください、2.11で修正されました。
scala> f"$a%n$b" // old
<console>:10: error: illegal conversion character
f"$a%n$b"
scala> f"$a%n$b" // new
res9: String =
xyz
xyz
したがって、補間しない言い訳はありません。