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 # [1]
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.
>
> Luke
>
> [1] 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.
=Austin
No, it hasn't changed. Generally C<is> specifies the storage class when
you're applying it to a variable. We've just been using it a little
weirdly on things that aren't variables, such as class declarations.
: > - 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).
Flutter, flutter.
: > So for example:
: >
: > class Dog
: > does Boolean # role
: > is extended # trait
: > is Mammal # [1]
:
: 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...)
Traits are seeming a lot more like roles than like superclasses
these days. But they may still be different beasties. A role will
have some rules about how it's composed into a class, while a trait
can presumably do anything it jolly well pleases. They may unify at
some point, but maybe only at a temperature of billions of degrees.
Larry