Hi,
I have a question regarding properties in nx.
A property can be set at creation time with <class> create <object> -property value and later get with <object> property and set with <object> property value
What was the reason not to use -property as method name of the accessor function? The -property notation seems IMO better and does not interfere with normal method names of an object. It is like the option notation in tk.
Regards, rene
René,
A property can be set at creation time with <class> create<object> -property value and later get with <object> property and set with <object> property value
What was the reason not to use -property as method name of the accessor function?
A straight forward (though not exhaustive) answer is that the dash prefix ("-") is being used for non-positional parameters in the NX concrete syntax (object and method parameters). While this is not a barrier to using the dash as a general prefix to getter/setter names (or method names in general), it might produce some distortion.
More importantly, yet less visible, dashed arguments to object dispatches (i.e., Tcl commands representing NX objects) do carry meaning which might lead to conflicts: A point in case are the special-purpose "-system" and "-local" arguments which can be used in self-dispatches, for example:
package req nx::test
Object create o { # ! gives a warning ! :public method -local args { return 1 }
:private method bar args { return 0 } :public method foo {} { # ! subtle differences ! return [:-local bar]-[: -local bar] } }
? {o foo} 1-0
This example will give you a warning (NX checks for dash-prefixed names at critical places) and demonstrates one of the subtle differences one runs into when using "-" beyond what is backed into NX (for good reasons, though).
Along these lines, NX won't allow the following custom-made fix of yours:
Object create o { :property {-local 1} }
-> invalid setter name "-local" (must not start with a dash or colon)
To summarise: While not carved in stone, the "-" (as the colon ":") has some preserved, internal meaning at some places in NX, in particular for argument processing.
The -property notation seems IMO better and does not interfere with normal method names of an object.
The issue of using dashed or undashed names, however, does not really address your concern of bloating an object's method interface.
There is a slightly more flexible API available to you for fine-tuning properties: You may specify properties with/without auto-generated setter/getter methods AND/OR with/without object parameters (to use a -<propertyName> in new or create calls), i.e., the use of "variable" and its "-config" and "-accessor" flags:
Class create C { :variable x 1 :public method X {} { return [incr :x -1] } :variable -config y :variable -config -accessor z; # "somewhat" equivalent to ":property z" }
? {[C create ::c] X} 0; # "C new -x" (object parameter) not available! ? {[C create ::c] info lookup methods x} ""; # "[C new] x" (accessor/mutator method) not available! ? {[C create ::c -y 2] y} "::c: unable to dispatch method 'y'"; # object parameter available, accessor method missing ? {[C create ::c -z 3] z} 3; # both in place!
It is like the option notation in tk.
Indeed :)
Right now, there is no ready-made, builtin interface resembling Tk's options (or fconfigure) in NX. However, it could be easily scripted if needed.
Let me know if I can provide you further assistance, in whatever direction.
cheers //stefan
Regards, rene _______________________________________________ Xotcl mailing list Xotcl@alice.wu-wien.ac.at http://alice.wu-wien.ac.at/mailman/listinfo/xotcl