【发布时间】:2016-11-03 15:12:41
【问题描述】:
我想漂亮地打印一个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 : _*)
}
}
这使用了 StringContext 的 ScalaDoc 中描述的字符串插值。
但这不会编译,出现这个神秘的错误:
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插值器,这似乎符合(并且有效)...
标签: scala string-interpolation