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 nxThe 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 ::eIs e truly empty?
% ::e info varsNX 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
1c) Is there a Tcl variable managed by the variable slot?
% ::e info vars
food) Retrieve foo's value
% ::e foo get 1
A second instance of Empty has no such capability: foo
Empty create ::fa) Is there any Tcl variable, one named foo? No …
% ::f info varsb) 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 varsc) Are the getter/setter methods gone? Yes …
% ::e foo get ::e: unable to dispatch method 'foo'