View · Search · Index
No registered users in community xowiki
in last 10 minutes

Re: [Xotcl] 'assign' method of properties not called on object initialization

From: Gustaf Neumann <>
Date: Thu, 26 Jan 2012 13:54:46 +0100

Dear Arthur,

this is a known problem area, already on our todo list.

What you are defining is an user-defined, slot-specific
parameter type.

In nx, object parameters are closer to the general parameter
handling (e.g. method parameters) than to accessors. The
parameters provide a rich set of configuration options
(value checkers, multiplicity, requiredness, ...). NX comes
with several built-in checkers/converters, which can be
extended with user-defined (scripted) checkers (see [1]).

For value checkers, a developer can decide, for which kind
of parameter a checker should be applicable. When a
value-checker is defined on the class nx::Slot, then this
checker can be used for method parameters in the same way as
for object parameters (see [2]).


Your example can be defined with a scripted checker as shown

nx::Class create Foo {
   :property bar {
     :type "bar"
     :method type=bar {name value} {
       puts stderr "assign called for $name $value"

set foo [Foo new]
$foo bar "test"
Foo new -bar "test"

The checker is called here - as expected - twice.

In the more general case below, the converter is defined on
nx::Slot, therefore applicable for every parameter (e.g. for
property "bar" and for the method "abrakadabra").

nx::Slot public method type=baz {name value} {
   puts stderr "assign called for $name $value"

nx::Class create Baz {
   :property bar:baz
   :public method abrakadabra {x:int y:baz,1..n} { return $x-$y }

set baz [Baz new]
$baz bar "test"
$baz abrakadabra 1 {a b c}
Baz new -bar "test"

Since y of abrakadabra has defined the multiplicity 1..n,
the checker is called for every single value (in the snipped
above 5 times).

The new parameters are more powerful and general than the
xotcl-style "assign" method; so i tend to believe the latter
is obsolete. Some cleanup is here still necessary.

-gustaf neumann

On 26.01.12 12:06, Arthur Schreiber wrote:
> Hi everyone,
> When assigning an object's property using object parameters, the assign
> method of that property does not get called. Is that a bug or intended
> behaviour?
> See the following code:
> package require nx
> nx::Class create Foo {
> :property bar {
> :public method assign { object property value } {
> puts "assign called for: $object $property $value"
> }
> }
> }
> set foo [Foo new]
> $foo bar "test"; # assign method of the bar property is called
> Foo new -bar "test"; # assign method of the bar property is _not_ called
> Kind regards,
> Arthur
> _______________________________________________
> Xotcl mailing list