Czy możliwe jest rozszerzenie pojedynczego obiektu w Smalltalk

Robię badania w refleksji Smalltalk i zastanawiałem się, czy możliwe byłoby rozszerzenie takiego obiektu, jak to byłoby możliwe na przykład w Ruby. Mam na myśli selektor, na który odpowiadają tylko poszczególne obiekty.

Oto kod Rubiego, który mówi, co mam na myśli. Dla wyjaśnienia: w Rubim otwiera to klasę wirtualną dla tego obiektu i rozszerza ją o nową definicję. Istotną częścią jest to, że nic nie zmienia definicji klasy!

o = Object.new
o.instance_eval {def foo;puts "foo";end}
o.foo #=> "foo"

#however this will fail:
m = Object.new
m.foo #=> NoMethod error

Dokładniej, moje pytanie dotyczy tego, czy jest to możliwe w standardowych implementacjach Squeak / Pharo lub innych małych implementacjach, bez dodawania istotnych struktur lub kodu, aby to umożliwić. Czyli z innymi słowami z regularnymi elementami odblaskowymi, które istnieją w Smalltalk.

Jako przykład można dodawać metody, usuwać metody, kompilować nowy kod do klasy, zmieniać zmienne instancji i prawie wszystko, ale nie znalazłem sposobu na rozszerzenie pojedynczego obiektu.

Test addInstVarNamed: #var.
Test compile: 'var ^var'.
t:= Test new.
Test instVarNames.
t instVarNamed: #var put: 666. 
t var. #=> 666

Jeśli odpowiedź brzmi „nie”, wyjaśnij dlaczego. Nie szukam rozwiązania tego problemu, ale raczej rozumiem, dlaczego nie ma problemu.

questionAnswers(6)

yourAnswerToTheQuestion