このバージョンはどうですか?
の使用にFormattable
は%s
フォーマットが必要ですが、好きなように解釈するためのフォーマット引数が与えられます。
は-interpolationFormattable
の途中でポップアップする可能性があります。これは、通常は かカスタム のいずれかを使用するためです。f
format
toString
formatTo
package object succinctly {
import java.util.{ Formattable, FormattableFlags, Formatter }
import scala.language.implicitConversions
implicit class Succinctly(val __thing: Double) extends AnyVal {
@inline def succinctly(s: String): String = s format fmtable(__thing)
@inline def succinctly: Formattable = fmtable(__thing)
}
private[this] val trailing = "(.*\\...*?)(0*)".r
private[this] def fmtable(a: Double) = new Formattable {
override def formatTo(formatter: Formatter, flags: Int, width: Int, precision: Int) = formatter.out append (
if (precision <= 0) a.toInt.toString
else s"%${width}.${precision}f" format a.asInstanceOf[java.lang.Double] match { case trailing(num, _) => num }
)
}
}
package succinctly {
import scala.language.postfixOps
import scala.math._
object Test extends App {
Console println (Pi succinctly "%1.2s")
Console println (3.1 succinctly "%1.2s")
Console println (3.0 succinctly "%1.2s")
Console println f"${3.1 succinctly}%1.2s"
}
}
-interpolator はマクロであるため、多少のコストはかかりますが、doubles を Trailless に昇格させて に変更するカスタム Interpolator を作成することも考えられます%f
。%s
f