Im Gegensatz zu einigen anderen Operatoren für Objekte, deren Verhalten logisch von der Klasse abhängen kann, sind die booleschen Operatoren Teil der Sprache. Wenn Sie einen Operator wie zB ==
haben, ist es logisch zu sagen, dass das Verhalten dieses Operators vom Objekttyp abhängt. Eine Zeichenfolge sollte Zeichen für Zeichen, ein Hash-Schlüssel-Wert-Tupel durch Schlüssel-Wert-Tupel usw. überprüfen. Das Verhalten von &&
und ||
basiert jedoch auf der -Definition der Definition von True und False, nicht irgendetwas Objektspezifisches. Wenn die Sprache es erlaubt, diese Operatoren zu überschreiben, könnte es kein konsistentes boolesches Modell geben, und diese Operatoren würden völlig nutzlos werden.
Zusätzlich gibt es auch eine Leistungsüberlegung. Weil &&
und ||
sind Kurzzirkeloperatoren, was bedeutet, dass, wenn das erste Argument zu, sagen wir, &&
, wird falsch ausgewertet, der zweite wird nie einmal ausgewertet. Mit ||
, wenn der erste Wert wahr ist, wird der zweite Wert nie ausgewertet. Dieses Verhalten wäre nicht möglich, wenn Sie diese Operatoren überschreiben könnten, da Ruby-Operatoren als Methoden überladen sind. Und alle Parameter müssen definitionsgemäß vor dem Aufruf der Methode ausgewertet werden. Somit geht die Leistungssteigerung und die Programmierfreundlichkeit eines Kurzschlussoperators verloren.
Weil sie ein Teil der Sprache sind, keine Methoden. –