Scott wrote:
> Actually, I think it becomes:
>
> sub foo is method {
> my $old = .foo;
> .foo = shift if @_;
> return $old;
> }
>
> But, I could be wrong. Any Damians care to enlighten? :-)
Well, I'm not a Damian, but I play one on perl6-language. ;-)
The final syntax for new-style Perl6 OO is currently "in flux", or
perhaps we should say: "its superposition has yet to collapse to a
stable eigenstate". Larry has ideas, I have ideas, and I'm working on
integrating them into a coherent proposal.
However, I don't think the above syntax will be it. I think it would likely
be closer to:
class Demo {
my $.foo;
method foo {
my $old = $.foo;
$.foo = @_[1] if @_ > 1;
return $old;
}
}
Though, in fact, the idiom in Perl 6 would probably be to use
just use lvalue methods:
class Demo {
my $.foo;
method foo is lvalue {
return $.foo
}
}
Nor am I yet convinced of the need for a separate C<$.attribute> syntax,
so it *might* just be:
class Demo {
my $foo;
method foo is lvalue {
return $foo;
}
}
The unary dot operator would only be used for method calls:
method bar {
my $realfoo = .foo;
.foo = 'bar';
.baz();
.foo = $realfoo;
}
to avoid the endless calls to self():
method bar {
my $realfoo = self.foo;
self.foo = 'bar';
self.baz();
self.foo = $realfoo;
}
Aaron then asked:
> Also, the "sub .foo" syntax is one I've now seen in an apocolypse and
> the good ensign's article, so I'm not sure where "sub foo is method" is
> coming from.
Those alternate universe syntaxes coming from quantum fluctuations in
the uncollapsed syntax superposition. I'll soon be firing a polaron
burst through the main deflector in a desparate attempt to stabilize
this anomoly before it destroys Perl 6.
;-)
Damian