John asked:

   > So, what about simple array accessors?

Writing:

        class Demo;

        my @.colors is public;

gives you:


   >     $obj.colors('red', 'green', 'blue');

No. $obj.colors() takes no arguments.


   >     $obj.colors = ('red', 'green', 'blue');

Yes.


   >     $obj.colors =  ['red', 'green', 'blue' ];

Yes. Arrays and array refs are (generally) interconvertable in Perl 6.


   >     push $obj.colors, 'red', 'green', 'blue;

Yes.


   >     pop $obj.colors;

Yes.


   >     print $obj.colors[1]

Yes.
   

   >     @{$obj.colors}[1]??

Yes (though you're missing the rest of the ternary operator there ;-)

   
   >     $obj.colors->[1]?? ;)

No. But "yes" to the Perl 6 equivalent:

         $obj.colors.[1]

 
   > Can/will such an accessor be auto-created?

Yes.

 
   > How about hashes

Yes:

        class Demo;

        my %.fruit is public;


   > (or "pairs"?)

Pairs are just a scalar type:

        class Demo;

        my PAIR $.pear is public;


   >     $obj.fruit(apple => 'red', berry => 'blue');

No.


   >     $obj.fruit = (apple => 'red', berry => 'blue');

Yes.


   >     $obj.fruit = { apple => 'red', berry => 'blue' };

Yes. Hashes and hash refs are (generally) intraconvertable in Perl 6.


   >     # Change apple color, but leave the blue berry
   >     $obj.fruit(apple => 'green');

No. You want:

        $obj.fruit{apple} = 'green';


   >     print $obj.fruit('apple'); # green

No. You want:

        print $obj.fruit{apple};


   > Regardless of whether something like the above two examples can/will be
   > auto-created, what would those methods look like anyway?  Would they simply
   > be:
   > 
   >     method colors is lvalue { return @.colors }
   >     method fruit  is lvalue { return %.fruit  }

Close. They'd actually be:

        method colors is lvalue () { return @.colors }
        method fruit  is lvalue () { return %.fruit  }

I.e. explicitly take no arguments.


   > How many of the examples with the code above support?

Most of them, evidently.

Damian

Reply via email to