[Xotcl] nx question

Stefan Sobernig stefan.sobernig at wu.ac.at
Wed Mar 28 18:08:43 CEST 2012


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 at alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl
>


-- 
Institute for Information Systems and New Media
Vienna University of Economics and Business
Augasse 2-6, A-1090 Vienna

`- http://nm.wu.ac.at/en/sobernig
`- stefan.sobernig at wu.ac.at
`- ss at thinkersfoot.net

`- +43-1-31336-4878 [phone]
`- +43-1-31336-746 [fax]


More information about the Xotcl mailing list