W Rubim przypisujemy wartości do obiektów za pomocą operatora =
.W jaki sposób przypisanie przypisania Ruby jest semantyczne?
połączeniu z niejawny wpisywanie i często się sytuacje tak:
myVar= :asymbol
Powyższa linia zarówno tworzy nowy obiekt symbol, a wiąże się z obiektu do nazwy zmiennej myVar
.
W sposób semantyczny jak to się dzieje?
miałem go młotkiem w głowę, że operator =
jest nie magiczną składni wbudowany interpreter, ale w rzeczywistości po prostu cukier syntaktyczny dla metody object.=(value)
.
Mając to na uwadze, mój najlepszy przypuszczenie to, że gdy interpreter widzi staramy się przypisać wartość nieokreślonej nazwy zmiennej, najpierw tworzy nowy obiekt z jakiegoś szczególnego rodzaju, jak undefined
lub null
czy coś, i następnie przekazuje wiadomość do tego obiektu, przy czym ładunek jest wartością, którą próbujemy przypisać.
Jednak wywołanie .class
na obiekcie nieinstalowanym wywołuje wyjątek, ponieważ Ruby myśli, że próbujemy wywołać metodę (której nazwa jest nazwą zmiennej, którą próbujesz wprowadzić) na numer self
> obj.class
> NameError: undefined variable or method 'obj' for main:Object
Tak więc, o ile mogę powiedzieć, nie mam możliwości, aby to ustalić eksperymentalnie.
Notatka:
W przypadku przypisania symboli, wierzę, że wartość przypisana (AKA wartość zwracana przez object_id
metoda instancji obiektu, AKA wartość unsigned long VALUE
zmiennej w Poziom C) to liczba reprezentująca przesunięcie w tabeli (uważam, że właśnie w ten sposób Ruby osiąga "bezpośrednią wartość" dla obiektów symboli).
W innych przypadkach wartością może być bezpośrednie kodowanie samego obiektu lub wartość, która ma być rzutowana na wskaźnik w odniesieniu do struct
.
Bez względu na to, w jaki sposób Rubin reprezentuje obiekt i czy ostatecznie przypisujemy referencję lub sam obiekt, nie jest to o to tutaj pytam.
dodatkowe pytanie:
Co klasa jest metoda =
odziedziczone? Nie mogę znaleźć go w specyfikacji dla Object lub BasicObject.
Np. "Nie ma łyżki", nie ma metody "=". – tadman
Czy jest to duplikat tego pytania? http://stackoverflow.com/questions/8345755/object-assignment-in-ruby –
@GeorgeStocker Zadane pytanie dotyczy ** efektu ** operatora '=', gdzie moje dotyczy jego implementacji w Ruby. – LukeP