ich mit Operatorpräzedenz in Scala experimentiert, und es ist etwas seltsam hier passiert:Operator Vorrang in scala seltsam verhält
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 ;
Für die erste Zeile, die Ausgabe ist:
called +
called *
called/
called %
called -
(Hinweis +
wird vor *
aufgerufen.) Für die zweite Zeile ist der Ausgang jedoch:
called *
called +
(*
heißt vor +
.) Ich glaube von dem, was ich lese here, dass *
vor +
aufgerufen werden sollte. Habe ich etwas falsch gemacht?
@puhlen es gibt nichts seltsames oder Buggy, Anrufe werden nach Priorität gruppiert und dann von links nach rechts ausgewertet, wie erwartet, siehe das Ende meiner Antwort. –