Scala,隐式值类型的后缀运算符 class

Scala, suffix operator on implicit value type class

这段代码适合我。

object MyTest extends App {

  import scala.language.implicitConversions
  import scala.language.postfixOps


  implicit class Euro(val value: Double) extends AnyVal {
    def *(factor: Double): Euro = new Euro(value * factor)

    override def toString = s"$value EURO"

    def euro : Euro = this

  }


  def runMe = {
    val e1 = 100.0.euro
    println(e1)
  }

}

但是100.0.euro不是那么优雅,所以我尝试了100.0 euro但是这导致了这个错误

recursive value e1 needs type [error] println(e1)

我想我打破了优先顺序或类似的东西。我无法弄清楚我做错了什么。感谢任何帮助。

嗯,这就是您必须显式启用 postfixOps 的原因

编译器可能正在尝试做类似

的事情
val e1 = 100.0.euro(println(e1))

你可以像这样消除行尾的歧义来避免它:

val e1 = 100.0 euro;
println(e1)

val e1 = (100.0 euro)
println(e1)

空行似乎也有效

val e1 = 100.0 euro

println(e1)

编译器尝试使用 println 作为 euro 方法的参数。在println前加空行应该可以解决。

查看 suffix_notation