No registered users in community xowiki
in last 10 minutes
in last 10 minutes
[Xotcl] Re: 0.84 mixin behaviour changed ??
From: Gustaf Neumann <neumann_at_wu-wien.ac.at>
Date: Tue, 13 Mar 2001 10:40:02 +0100
On Tuesday 13 March 2001 10:27, Zoran Vasiljevic wrote:
> Hi !
>
> I strongly suspect that in0.84 version,
> the mixin process is changed, which
> brings some incompatibilities.
yes, the initialization of per-object mixins changed, and it
is documented in the changelog (i inserted an exclamation mark
before the item to denote the potential incompatibility) and in
the tutorial. i have removed now the obsolete part from the
language reference and rewrote the section in the tutorial
more explicit as follows:
Date: Tue, 13 Mar 2001 10:40:02 +0100
On Tuesday 13 March 2001 10:27, Zoran Vasiljevic wrote:
> Hi !
>
> I strongly suspect that in0.84 version,
> the mixin process is changed, which
> brings some incompatibilities.
yes, the initialization of per-object mixins changed, and it
is documented in the changelog (i inserted an exclamation mark
before the item to denote the potential incompatibility) and in
the tutorial. i have removed now the obsolete part from the
language reference and rewrote the section in the tutorial
more explicit as follows:
---- Note, that the constructors (init methods) of per-object mixins (and per-class mixins) are only called, if the mixin is registered already during object initialization (when init is called). For per-object mixins, one can achieve the initialization of a mixin via an idiom like Object o -mixin M -init that registers the mixin before init is called. When a mixin is registered after object creation and it needs initializations, it is neccessary to define special methods for this. Note, that the behavior described here is introdoced in version 0.84 to ensure consistent behavior of intrinsic classes, per-object and per-class mixins, and to achieve predictable behavior for dynamic registration for all kind of mixins, and as well during recreations of objects having mixins registered. Older versions used heuristics for the initialisation of per-object mixins. ---- For your example below, i would recommend to use a per-class mixin "... A instmixin B" since the intension is obviously to register the mixin for each instance of Class A hope, this clarifies best regards -gustaf neumann > Please consider this simple example > > Class A > Class B > > A instproc init {args} { > [self] instvar C > [self] mixin B > > set C(Aelement) 1 > } > B instproc init {args} { > [self] instvar C > set C(Belement) 1 > } > > A instproc foo {args} { > puts "[self] A bar" > } > B instproc foo {args} { > puts "[self] B bar" > } > > > The 0.83 behaviour... > > % A a > % a foo > > ::a B bar > > % a array get C > Belement 1 Aelement 1 > > > The 0.84 behaviour > > % A a > % a foo > > ::a B bar > > % a array get C > Aelement 1 > > > WHERE is the "Belement" ?????? > It seems that 0.84 does not properly calls the "init" > on the B class before doing an mixin ? > Or am I missing something completely? > Any ideas ? > > > Cheer's > Zoran Vasiljevic > Archiware > > _______________________________________________ > Xotcl mailing list - Xotcl_at_wi.wu-wien.ac.at > http://wi.wu-wien.ac.at/mailman/listinfo/xotcl