Warum sagen wir im folgenden Beispiel "k.send: hallo" anstelle von "k.receive: hallo", wenn
(Bist du so verwirrt wie ich?)
Welches Objekt auch immer diesen Code enthält, sendet die Nachricht - vermutlich main. Betrachten wir es mit expliziteren Objekten und normaler Nachrichtenübergabe.
%Vor% In der letzten Zeile dieses Codes sendet main marry
an patty und patty schickt sich wiederum last_name=
und sendet bob last_name
.
In Smalltalk ist alles ein Objekt. Der "Absender" ist das Objekt, das der Besitzer des Gültigkeitsbereichs ist, aus dem die Nachricht stammt (d. H. Der "Dies" - oder "Selbst" -Zeiger).
Wie zuvor, erbt Ruby dieses Konzept. In weniger abstrakten Begriffen, wenn ich Ihnen einen Brief poste, bin ich der "Absender" (er kam aus meinem Büro), und Sie sind der "Empfänger" (die Adresse auf der Vorderseite gehört Ihnen). Also würde ich foo.send myLetter schreiben: Du, foo, empfange meinen Brief. Der Absender ist implizit, der Besitzer des Codes, der das "Posting" ausführt.
Ich kann sehen, wo Sie verwirrt werden, aber das Problem ist weitgehend semantisch. Ihr Argument ist, dass die Methode send
wirklich receive
sein sollte, da k
eine Nachricht empfängt (d. H.% Co_de%). Im Klartext lesen Sie k.receive :hello
als "k sendet die Nachricht 'Hallo' (an wen?)", Anstatt "k ist die Nachricht gesendet 'Hallo'".
Ein könnte die Methode "receive" umbenennen, aber das ist auch ein bisschen irreführend, weil k.send :hello
möglicherweise nicht die Nachricht erhält - k
kann nicht auf die Nachricht reagieren, k
kann entscheiden, sie zu ignorieren, oder k
kann wählen, sie an ein anderes Objekt weiterzugeben. In Ruby (und Smalltalk, die Ruby beeinflusst haben) sind Methoden eher -Anforderungen , um etwas zu tun, als Befehle , um dies zu tun.
Tags und Links ruby terminology