Rosetta example: Add a variable to a class instance at runtime
Demonstrate how to dynamically add variables to an object (a class instance) at runtime.
package req nx
The class Empty
does not provide any structural or behaviora
features on behalf of future instances, they will remain empty.
nx::Class create Empty
Provide one instance of Empty
to add an object variable to …
Empty create ::e
Is e
truly empty?
% ::e info vars
NX offers different types of object-variable managers: properties, variable slots, and plain Tcl per-object variables. Below, we showcase variable slots (although the others can be added dynamically alike).
a) Declare a variable slot foo
; -accessor
will provide
getter/setter methods for this one object e
automatically.
::e object variable -accessor public foo
b) Define a value for the variable slot foo
% ::e foo set 1
1
c) Is there a Tcl variable managed by the variable slot?
% ::e info vars
foo
d) Retrieve foo
's value
% ::e foo get 1
A second instance of Empty
has no such capability: foo
Empty create ::f
a) Is there any Tcl variable, one named foo
? No …
% ::f info vars
b) Are there getter/setter methods for a foo
? No …
% ::f foo set ::f: unable to dispatch method 'foo'
c) Is there a variable slot foo
? No …
% ::f info object variables foo
In NX, once dynamically added, a variable slot can also be dynamically removed again.
::e delete object variable foo
a) Is the variable slot foo
gone? Yes …
% ::e info object variables foo
b) Is the Tcl variable gone? Yes …
% ::e info vars
c) Are the getter/setter methods gone? Yes …
% ::e foo get ::e: unable to dispatch method 'foo'