Larry Wall wrote: > Jonathan Lang wrote: > : In a similar vein, what about making a disjunction of classes in an > : C<is> or C<isa> clause synonymous with a sequence of appropriate > : clauses? Ditto with traits and C<is>, roles and C<does>, attributes > : and C<has>, etc.; thus: > : > : class DangerousPet does Pet & Predator { > : } > : > : would be the same as > : > : class DangerousPet does Pet does Predator { > : } > > Depends on how you look at it. A DangerousPet is something that can > act like either a Pet or a Predator, or both. Sometimes you want & > and sometimes you want |. (Of course, a lawyer will tell you that > "and" and "or" mean the same thing in a legal document.) I suppose > there could even be some sense in > > class DangerousPet does Pet ^ Predator { > } > > meaning it can be a Pet or a Predator but not both at the same time. > Of course, that probably means that you can't actually have any > objects of type DangerousPet. Or maybe it does, but you can't call > any ambiguous DangerousPet methods without casting to either Pet or > Predator. Hmm...
Since disjunctions are unambiguous in their membership, this isn't a problem for them; only for disjunctions, ajunctions, and (horrors!) injunctions. Admittedly, a class that C<is> an ajunction of classes would be a cute way of creating something conceptually akin to a C union. I could see practical uses for the disjunctive forms; even there, I'm not sure that the coding required to make the compiler handle things would be worth the time invested - but it just might be. I'm even less sure when it comes to the other kinds of junctions. > That would mean that C<does> implies a constraint test on typeof($self) > rather than classof($self). (Presuming typed refs in the first place, > of course.) OTOH, C<is>, C<does>, and C<has> are declarative in nature, not predicative; it's much like assignment vs. equality. ===== Jonathan "Dataweaver" Lang __________________________________ Do you Yahoo!? New Yahoo! Photos - easier uploading and sharing. http://photos.yahoo.com/