In Ruby weisen wir Objekten mit dem Operator Werte zu.Wie behandelt Ruby die Zuweisung semantisch?
Kombinieren Sie diese mit impliziter Typisierung und wir häufig Situationen wie diese:
myVar= :asymbol
Die obige Zeile erzeugt sowohl ein neues Symbol-Objekt und bindet das Objekt an die Variablennamen myVar
.
Semantisch, wie wird das gemacht?
Ich habe es mir in den Kopf gehämmert, dass der =
Operator nicht Magie Syntax in den Interpreter eingebaut ist, ist aber eigentlich nur syntaktischer Zucker für die object.=(value)
Methode.
In diesen Sinne, meine beste Vermutung ist, dass, wenn die Dolmetscher wir Wert auf einen nicht definierten Variablennamen zuweisen versuchen, sieht es zunächst ein neues Objekt von einer besonderen Art schafft, wie undefined
oder null
oder so etwas, und Übergibt dann die Nachricht :=
an dieses Objekt, wobei die Nutzlast der Wert ist, den wir zuweisen möchten.
jedoch Aufruf .class
auf einem nicht instanzierte Objekt wirft nur eine Ausnahme, weil Rubin denkt wir versuchen, eine Methode aufrufen (dessen Name ist der Name der Variablen, die Sie versuchen, ins Leben zu bringen) auf self
Also, soweit ich das beurteilen kann, habe ich keine Möglichkeit, dies experimentell herauszufinden.
Randbemerkung:
Im Fall der Symbolzuordnung, glaube ich, dass der zugewiesene Wert (AKA der Wert durch das instanziiert Objekt zurückgegeben object_id
Methode, AKA der Wert des unsigned long VALUE
Variable auf dem C level) ist eine Zahl, die irgendwo einen Offset in einer Tabelle darstellt (ich glaube, so erreicht Ruby den 'unmittelbaren Wert' für Symbolobjekte).
In anderen Fällen kann der Wert eine direkte Codierung des Objekts selbst sein, oder ein Wert, der in einen Zeiger in Bezug auf eine struct
umgewandelt werden soll.
Unabhängig davon, wie Ruby das Objekt darstellt und ob wir am Ende eine Referenz oder das Objekt selbst zuweisen, ist nicht das, worum ich hier bitte.
Zusätzliche Frage:
Welche Klasse ist die =
Methode geerbt von? Ich kann es in der Spezifikation für Object oder BasicObject nicht finden.
Wie "Es gibt keinen Löffel" gibt es keine '=' Methode. – tadman
Ist das ein Duplikat dieser Frage? http://StackOverflow.com/Questions/8345755/Object-Assignment-in-Ruby –
@GeorgeStocker Die referenzierte Frage ist über den ** Effekt ** des '=' -Operators, wobei sich bei mir um seine Implementierung in Ruby handelt. – LukeP