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。
这段代码适合我。
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。