Ist es möglich, ein einzelnes Objekt in Smalltalk zu erweitern

Ich recherchiere in Smalltalk-Reflexion und habe mich gefragt, ob es möglich ist, ein einzelnes Objekt wie das in Ruby zu erweitern. Damit meine ich einen Selektor, auf den nur bestimmte Objekte reagieren.

Hier ist ein Ruby-Code, der angibt, was ich meine. Zur Verdeutlichung: Öffnen Sie in Ruby eine virtuelle Klasse für dieses Objekt und erweitern Sie sie mit einer neuen Definition. Das Entscheidende dabei ist, dass sich an der Klassendefinition nichts ändert!

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

Genauer gesagt ist meine Frage, ob dies in Standard-Squeak / Pharo- oder anderen Smalltalk-Implementierungen möglich ist, ohne wesentliche Strukturen oder Code hinzuzufügen, um dies zu ermöglichen. Also mit anderen Worten mit regelmäßigen Reflexionsmerkmalen, die in Smalltalk existieren.

Beispielsweise ist es möglich, Methoden hinzuzufügen, Methoden zu entfernen, neuen Code in eine Klasse zu kompilieren, Instanzvariablen zu ändern und so ziemlich alles, aber ich habe keine Möglichkeit gefunden, ein einzelnes Objekt zu erweitern.

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

Wenn die Antwort nein ist, erklären Sie warum. Ich möchte dieses Problem nicht lösen, sondern verstehen, warum es nicht in Smalltalk ist.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage