如何以优先级创建自定义操作员



i HAVA与自定义操作员的类

case class Num(var value:Int) {
    def add(x:Num) = Num(value + x.value)
    def mul(x:Num) = Num(value * x.value)
  }

所以我可以像这样称呼它们

val a = Num(2)
val b = Num(3)
val c = Num(4)
val m1 = a add b mul c

但是如何在add之前执行mul?我看到了像+|一样的解决方案,而不是add,但是我希望在操作员中包含字母,而+add*mul不起作用。我也想包含一个pow功能,因此比mul

需要更高的前端

您可以在添加后使用括号。

val m1 = a add (b mul c) = 14
val m1 = a add b mul c = 20

update

您在命名方法方面没有任何限制。例如,您可以为类定义方法 , - , *等。

case class Num(var value:Int) {
    def + (x:Num) = Num(value + x.value)
    def *(x:Num) = Num(value * x.value)
  }
  object Num  extends App {
    val a = Num(2)
    val b = Num(3)
    val c = Num(4)
    val m1 = a + b * c
    println(m1)
}

输出

Num(14)

最新更新