In Smalltalk gibt es zwei häufig innerhalb eines Methodenhauptteils gefundene Begriffe: self
und yourself
.Was ist der Unterschied zwischen dir und dir in Smalltalk?
Was ist der Unterschied zwischen ihnen?
In Smalltalk gibt es zwei häufig innerhalb eines Methodenhauptteils gefundene Begriffe: self
und yourself
.Was ist der Unterschied zwischen dir und dir in Smalltalk?
Was ist der Unterschied zwischen ihnen?
Das reservierte Wort self
ist eine Pseudovariable (kann nicht zugewiesen werden), die sich auf den aktuellen Empfänger der Methode bezieht, in der es verwendet wird. Auf der anderen Seite yourself
ist eine Nachricht, die Sie an jedes Objekt senden können, um das gleiche Objekt zu erhalten.
Die Implementierung von yourself
ist
yourself
^self
was bedeutet, dass die Nachricht yourself
verhält sich wie ich gerade erklärt.
Der Grund, warum yourself
vorhanden ist Nachricht Kaskadierung zu unterstützen, wo Sie es als die letzte Nachricht setzen der resultierende Ausdruck mit dem Empfänger, um sicherzustellen, beantworten:
^receiver
msg1;
msg2;
yourself
Wenn msg2
könnte mit etwas beantworten anders receiver
können Sie die yourself
Nachricht anhängen, um diese Antwort zu ignorieren und stattdessen receiver
zurückgeben. Natürlich können Sie das gleiche Ergebnis durch Schreiben erreicht haben könnte:
receiver
msg1;
msg2.
^receiver
Wegen der Einfachheit dieser beiden Beispiele, könnte es schwer zu verstehen, was der Vorteil wäre. Beachten Sie jedoch, dass receiver
keine Variable, sondern ein komplexer Ausdruck ist.
^(self msg: arg1 arg: arg2)
msg1;
msg2;
yourself.
Ohne yourself
verwenden würden Sie eine temporäre hinzufügen, um den Wert des Empfängers zu speichern, das gleiche zu erreichen:
| answer |
answer := self msg: arg1 arg: arg2.
answer
msg1;
msg2.
^answer
die ein wenig ausführlicher ist.
Zusammenfassend ist self
ein reserviertes Wort, das sich auf den aktuellen Empfänger bezieht und yourself
ist nur eine normale Methode, die nur aus Bequemlichkeit da ist.
self
ist ein Synonym für ein Objekt: speziell der Empfänger der Nachricht, die die Methode aufgerufen hat. Es wird innerhalb des Körpers einer Methode verwendet.
yourself
ist eine Nachricht, die Sie an ein Objekt senden können, das den Empfänger der Nachricht zurückgibt.
anObject yourself
gibt anObject
zurück.
yourself
wird oft am Ende einer Nachricht Kaskade innerhalb einer Methode Körper verwendet.
Wenn Sie den Rückgabewert der Methode soll der Empfänger sein, aber die letzte Nachricht in der Kaskade zurückgibt etwas anderes, könnten Sie schreiben entweder:
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument .
^self
oder
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument;
yourself