On Fri, Dec 12, 2003 at 04:31:32PM -0500, Austin Hastings wrote: : > - 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?
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