Возможно ли изменить приоритет любых самоопределяемых операторов? Например, я реализую элементарную арифметику с полностью самоопределяемыми операторами.Как изменить самоопределяемые приоритеты операторов scala
case class Memory(name:String){
var num:Num = null
def <<=(x:Num): Unit = {
println(s"assign ${x.value}")
this.num = x
}
}
case class Num(var value:Int) {
def +|+(x:Num) = {
println("%d + %d = %d".format(value,x.value,x.value + value))
Num(value + x.value)
}
def *|*(x:Num) = {
println("%d * %d = %d".format(value,x.value,x.value * value))
Num(value * x.value)
}
}
val m1 = Memory("R")
val a = Num(1)
val b = Num(3)
val c = Num(9)
val d = Num(12)
m1 <<= a *|* b +|+ c +|+ d *|* a
println("final m1 ",m1.num.value)
Результаты
1 * 3 = 3
3 + 9 = 12
12 * 1 = 12
12 + 12 = 24
assign 24
(final m1 ,24)
Видимо старшинство правильно. Я хочу *|*
быть таким же приоритетом, как *
и +|+
так же, как +
, <<=
эквивалентен как =
. Как Scala это понять?
Почему вы говорите о приоритете не так? Вы получаете тот же результат, что и «1 * 3 + 9 + 12 * 1», и если вы измените эти операторы на простые '+' и '*', вы увидите, что они вызывается в том же порядке. – jwvh
@jwvh Вы правы. Заказ - именно то, что я хочу. Но я не знаю, как scala правильно правит. – worldterminator