[Xotcl] Named objects

Gustaf Neumann neumann at wu.ac.at
Fri Aug 10 09:47:57 CEST 2012


On 10.08.12 03:39, Jonathan Kelly wrote:
> Hi,
>
> I'm trying to get my head into the "named object" space. I was looking
> at the container example for a way in and now I'm stuck (again).
>
> nx::Class create SimpleContainer {
>    :property {memberClass ::MyItem}
>    :property {prefix member}
>
>    # Require the method "autoname" for generating nice names
>    :require method autoname
>
>    # The method new is responsible for creating a child of the current
>    # container.
>    :public method new {args} {
>      set item [${:memberClass} create [:]::[:autoname ${:prefix}] {*}$args]
>    }
> }
>
> What does the ":require method autoname" do?
One can load the definition of single method via the 
"require method".
It is somewhat similar to traits, but brings in just a 
single method (might
be an alias, or a scripted defintion, etc.). See e.g. 
tests/method-require.test

In this case, the predefined method "autoname" is registered 
as a method
of "SimpleContainer".

> I think I understand what [:autoname ${:prefix}] is/does but what on
> earth is "[:]::[:autoname ${:prefix}]" ?
The single colon ":"  is used to parameterize the method 
invocation.
See Listing 33 in
http://www.next-scripting.org/docs/2.0b3/doc/nx/tutorial/index1#_method_resolution
When called without arguments, it returns the current object.

the line in question is unabbreviated

    "[self]::[[self] autoname ${:prefix}]"

and is after substitution a name consisting of the current 
object
appended by "::" and an autonamed enity (using the variable
"prefix" as a stem).

The method autoname is the same as
http://media.wu.ac.at/doc/langRef-xotcl.html#Object-autoname

If one does not care about the names of the created subobjects,
one could use as well:

     SimpleContainer public method new {args} {
        ${:memberClass} new -childof [self] {*}$args
      }

Hope this helps
-gustaf



More information about the Xotcl mailing list