[Xotcl] RE: [Xotcl] Re: [Xotcl] Object mixin with passing init args ?

Gustaf Neumann Gustaf.Neumann@wu-wien.ac.at
Wed, 13 Dec 2000 11:41:01 +0100 (CET)


>>>>> "Z" == Zoran Vasiljevic <zoran@munich.com> writes:
Z> ------Original Message------
>> 2. However, in the "mixin" case we could enable argument passing,
>> because "mixin" has just one argument? The rest could be passed > to
Z> "init". any objections?

Z> obj mixin Foo arg1 arg2 arg3
Z> would pass arg1-arg3 to init of Foo. Right?

Z> obj mixin [list Foo Bar] arg1 arg2 arg3

Z> would pass arg1-arg3 to init of Foo AND of Bar. Right again?

Z> Is so, then I think it should be done, if possible. 0.85 ? 0.9 ?

 from the implementation point of view this is not a big issue.
 however, from my experience, i should note that i switched from a
 style of "passing arguments to init" to the "-parameter style of
 configuring objects", which is in almost all cases the more elegant 
 solution.

 With your example, you will run into a similar problem when
 multiple mixins are registered. 

a) Consider the following example:
 
[Class C] instproc init {a} {puts "[self class] $a"; next}
[Class M1] instproc init {b} {puts "[self class] $b"; next}
[Class M2] instproc init {c} {puts "[self class] $c"; next}

 C c1 3 -mixin {M1 M2}

 here passing one argument to the mixin method should work
 (weirdly enough, the argument is before the -mixin, but would
 have similar semantics as
 
   C c1 3
   c1 mixin {M1 M2} 3

 but who says, that the arguments a b and c have the same 
 intended semantics? ... using -parameter is much clearer

b) Then we have the factoring problem: what, if M1 and M2 have the
  different argument lists. we could use something like:

   c1 mixin {M1 M2} {3 {a b}}

 but isn't that ugly? 
 
 this makes the manipulation of the mixin list (eg. automatically
 inserting a mixin, if it is not there) by a program over-complicated.

c) From the idea, mixins are orthogonal to the intrinsic classes 
  and can used for different classes as well. Should not the following
  work somehow as well?

    [Class D] instproc init {x y} {puts "[self class] $x $y"; next}
     D d1 a b -mixin M1

I see your issue, bit we should not rush into implementation.  

Greetings,
-gustaf