Кто-то должен сказать, что вы должны повернуть вверх предупреждения:
[email protected]:~$ 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
Тот случай, когда вы должны добавить паразитных форматировщик, когда вы хотите, символ новой строки:
scala> f"$a%s%n$b$c"
res8: String =
xyz
xyzxyz
Я думаю, интерпол должен обрабатывать п «$ а% п $ Ь». О, держись, это зафиксировано в 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
Так что теперь нет оправдания, чтобы не интерполировать.
+1 для интуиции + новобрачность. –