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

Re: [Xotcl] Mixins in XOTcl

From: Michael Schlenker <schlenk_at_uni-oldenburg.de>
Date: Mon, 24 May 2004 16:09:08 +0200

Adam Turoff wrote:

> Uwe Zdun wrote:
>
>>what about just extending the usually interfaces with new
>>arguments, such as:
>>
>>A mixin X
>>A mixin add Z 3
>>A mixin add Y end
>>A mixin delete Y
>>A instmixin add T 1
>>A superclass B
>>A superclass add C
>
>
> That's pretty much what I was thinking:
>
> A mixin X ;# current behavior
> A mixin -set X ;# A mixin X
> A mixin -set X Y Z ;# A mixin {X Y Z}
>
> A mixin -add X ;# A mixinappend X
>
> Using -set, -add and -delete feels more Tcl-ish. Also, it
> is somewhat bad style to name a class 'add', but even worse
> style to name it '-add'. By using options, I can still
> mixin a class 'add' into a definition. Preventing me from
> mixing in a class '-add' is a good idea, for other reasons.

I wouldn't say an option for an action feels more Tcl-ish. I do not know
any tcl command that uses options to specifiy an action, its nearly
always a subcommand and options just specify details.
If you want to prevent things from happening add assertions or make it
explicit. In Tcl you name variables and procs as you like, even space,
\n \r or any kind of unicode fancyness is in principle supported and
there is no need to break this tradition for class names or mixin names.

So:
A mixin set foo bar baz
A mixin add boing
A mixin delete foo

feels quite natural, its verbose but thats usual Tcl style.

Why shouldn't you be able to add an mixin 'add' after the change?

A mixin add add

Syntax would probably be:

obj mixin ?subcmd args? , with subcmds add delete set
or
obj mixin mixinlist

So if the llength is 4 or greater the first behaviour is used, with just
one extra arg the old behaviour could be used.

Michael