"k.send: hallo" - wenn k der "Empfänger" ist, wer ist der Absender?

8

Warum sagen wir im folgenden Beispiel "k.send: hallo" anstelle von "k.receive: hallo", wenn

(Bist du so verwirrt wie ich?)

%Vor%     
lorz 27.05.2009, 16:43
quelle

3 Antworten

6

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 .

    
Chuck 27.05.2009, 18:30
quelle
7

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.

    
Adam Wright 27.05.2009 16:46
quelle
2

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.

    
mipadi 27.05.2009 18:45
quelle

Tags und Links