我用Scala的运算符优先级试验,并有一些奇怪的事情发生在这里:运算符优先级的行为奇怪
class Op{
def +(that:Op):Op={println("called +");this}
def -(that:Op):Op={println("called -");this}
def *(that:Op):Op={println("called *");this}
def /(that:Op):Op={println("called /");this}
def %(that:Op):Op={println("called %");this}
}
val op = new Op;
op+op-op*op/op%op ;
op+op*op ;
对于第一线,输出为:
called +
called *
called/
called %
called -
(通知+
*
之前被调用)然而,对于第二行,所述输出为:
called *
called +
(*
之前调用+
。)我相信从我读的here*
应该在+
之前调用。有什么我错了吗?
@puhlen没有什么奇怪的或错误的,调用按优先顺序分组,然后按照预期从左到右进行评估,看到我的答案结束。 –