Damian Conway <[EMAIL PROTECTED]> writes:
> Aaron Sherman wrote:
>
>> > What if I want my methods to be called C<.get_bar()> and C<.set_bar()>,
>> > since a certain Perl OO specialist suggests this approach is best for
>> > avoiding ambiguity in one's API?
>>
>> Then you can declare them as such:
>>
>> sub get_bar() { .bar }
>> sub get_baz() { .baz }
>> sub set_baz($newbaz) { .baz = $newbaz }
>
>
> Close. They'd probably be implemented like this:
>
> method get_bar() { $.bar }
> method get_baz() { $.baz }
> method set_baz($newbaz) { $.baz = $newbaz }
>
> Of course, there would need to be some way of simultaneously preventing the
> automagic creation of accessors. That might be manual:
>
> class Foo {
> my $.bar;
> my $.baz;
>
> method bar is private {}
> method baz is private {}
> ...
> }
>
> or per-attribute:
>
> class Foo {
> my $.bar is accessorless;
> my $.baz is accessorless;
> ...
> }
>
> or (my favorite) global:
>
> class Foo {
> no accessors;
>
> my $.bar;
> my $.baz;
> ...
> }
I've recently come to the conclusion that I like my get/set methods to
look like:
method foo() { $.foo }
method set_foo($self: $new_foo) { $.foo = $new_foo; $self }
(Perl6 syntax obviously). I hope it's going to be possible to set that
up automagically... (Yeah, I know, if/when Perl 6 gets macros...)
--
Piers
"It is a truth universally acknowledged that a language in
possession of a rich syntax must be in need of a rewrite."
-- Jane Austen?