Я хотел бы довольно-Распечатайте Product
, такие как case class
, поэтому я создаю следующую особенность:динамическая строка интерполяции
trait X extends Product {
def fmtStrs =
productIterator map {
case _ : Double => "%8.2f"
case _ => "%4s"
} map (_ + separator) toSeq
override def toString = {
new StringContext("" +: fmtStrs : _*) f (productIterator.toSeq : _*)
}
}
Это использует интерполяцию строки, как описано в ScalaDoc для StringContext.
Но это не составит, с этой загадочной ошибки:
Error:(69, 70) too many arguments for interpolated string
new StringContext("" +: fmtStrs : _*) f (productIterator.toSeq : _*)
Является ли это ошибка или ограничение макроса? Обратите внимание, что выполнение следующего работает хорошо, так что я подозреваю, что это может быть связанно с переменным списком аргументов:
scala> val str2 = StringContext("","%4s,","%8.2f").f(1,23.4)
str2: String = " 1, 23.40"
Скорее странно, если вы измените интерполятор 'f' на интерполятор' s', это, по-видимому, соответствует (и работает) ... – Luciano