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