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'