On Tue, 2005-04-26 at 09:49, Juerd wrote:
> > return $self but role {
>
> does role { ... }
As I understood (please correct me if I'm wrong), the difference between
"does" and "but" was that does modifies the existing object in-place,
and does creates a copy with the new mixin functionality. In this case,
the method in question is acting as a generator, and should NOT modify
the invocant.
I'm getting this from S12:
Then you can say
$a = 0 but answer(42)
Note that the parenthesized form is not a subroutine or method
call. It's just special initializing syntax for roles that
contain a single property. The above really means something
like:
$a = ($anonymous = 0) does answer(42);
which really means:
(($anonymous = 0) does answer).answer = 42;
$a = $anonymous;
Which is why there's a but operator.
> > It certainly seems very attractive, but I'm not sure if roles can be
> > anonymous and/or closures.
>
> They can. But I think what you wrote is rather unnecessarily complex.
How is this complex? This is fairly standard for a factory type method
(I think I said "generator" before, oops), but in most languages, a
factory either has to return from a pre-defined tree of classes, or has
to build its own mechanism. In Perl 6, closures combined with anonymous
roles let us build this functionality trivially, on the fly.
--
Aaron Sherman <[EMAIL PROTECTED]>
Senior Systems Engineer and Toolsmith
"It's the sound of a satellite saying, 'get me down!'" -Shriekback