Front page | perl.perl6.language |
Postings from December 2003
From: Austin Hastings
December 12, 2003 13:26
Message ID: ICELKKFHGNOHCNCCCBKFOEJNCIAA.Austin_Hastings@Yahoo.com
> -----Original Message-----
> From: Luke Palmer [mailto:firstname.lastname@example.org]
> Sent: Friday, December 12, 2003 6:23 AM
> So I'm seeing a lot of inconsistent OO-vocabulary around here, and it
> makes things pretty hard to understand.
> So here's how Perl 6 is using said inconsistent terms, AFAIK:
> - attribute
> A concrete data member of a class. Used with C<has>.
> - property
> An out-of-band sticky note to be placed on a single object.
> Used with C<but>.
> - trait
> A compile time sticky note to be placed on a wide variety
> of things. Used with C<is>.
Did I miss something with IS and OF?
That is, I think:
C<is> means storage type, while C<of> means trait or class:
my @a is Herd of Cat;
declares a Herd (presumably a base class of some collection type) with the trait that, in this case, members will be of Class Cat.
Did this change when I wasn't looking?
> - role
> A collection of methods to be incorporated into a class sans
> inheritance (and maybe some other stuff, too). Used with C<does>.
No comment, since this is still hovering (see Larry's reply).
> So for example:
> class Dog
> does Boolean # role
> is extended # trait
> is Mammal # 
The only difference I can see here between C<does Boolean> and C<is extended> would be the declaration of Boolean or extended (unless C<is> can only be used with built-in traits, which seems unnecessarily restrictive...)
> has $.tail; # attribute
> has @.legs; # attribute
> my $fido = Dog.new
> but false; # property
> Hope that clears things up.
>  This is a base class, which is an overloaded use of C<is>. Though,
> upon A12 release, we'll probably find out that it's not overloaded but
> instead, elegantly unified, somehow.
Thanks for bringing this out.
by Austin Hastings