RosettaCodeData/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-3.st

16 lines
477 B
Smalltalk
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
!Object methodsFor:'adding slots'!
addSlot: slotName
|anonCls newObj|
anonCls := self class
subclass:(self class name,'+') asSymbol
instanceVariableNames:slotName
classVariableNames:''
poolDictionaries:'' category:nil
inEnvironment:nil.
anonCls compile:('%1 ^ %1' bindWith:slotName).
anonCls compile:('%1:v %1 := v' bindWith:slotName).
newObj := anonCls cloneFrom:self.
self become:newObj.