2008-09-18 8 views
7

In Ruby sind Operatoren wie in vielen anderen OO-Programmiersprachen überladbar. Es können jedoch nur bestimmte Zeichenoperatoren überladen werden.Warum erlaubt Ruby nur das Überladen bestimmter Operatoren

Diese Liste kann unvollständig sein, aber hier sind einige der Betreiber, die nicht überlastet werden können:

!, not, &&, and, ||, or 

Antwort

11

Methoden sind überladbaren, das ist ein Teil der Sprachsyntax.

+1

Wie Jorg in seiner Antwort erwähnt, kann '!' Überschrieben werden. –

12

Yep. Betreiber sind nicht überlastbar. Nur Methoden.

Einige Betreiber sind nicht wirklich. Sie sind Zucker für Methoden. Also 5 + 5 ist wirklich 5.+(5), und foo[bar] = baz ist wirklich foo.[]=(bar, baz).

1

Und lassen Sie uns nicht über << zum Beispiel vergessen:

string = "test" 
string << "ing" 

ist der gleiche wie der Aufruf:

string.<<("ing") 
6

In Ruby 1.9 die ! Operator tatsächlich auch ein Verfahren ist, und außer Kraft gesetzt werden kann. Dies lässt nur && und || und ihre Pendants niedriger Priorität and und or.

Es gibt auch einige andere "kombinierte Operatoren", die nicht überschrieben werden können, z. a != b ist eigentlich !(a == b) und a += b ist eigentlich a = a+b.