Piers Cawley wrote: > > Why does it have to be a String, though? What prevents it from > > working with anything that can stringify, besides the overly > > restrictive signature? What if you could say (the Perl 6 equivalent > > of): > > > > sub print_it ( does Stringify $thingie ) > > { > > print $thingie.stringify(); > > } > > > > That's both more general and something more specific. By asking for > > what you really want, you're not coding everyone else into a corner. > > In this particular case I prefer the Smalltalk thing of requiring all > objects to have a C<print_on($aStream)> method and not even requiring > that C<$aStream> satisfy the Stream role. But that's probably a matter > of taste.
Maybe as an alternative to role Stringify {must stringify();} sub print_it (Stringify $thingie) {print $thingie.stringify();} you might be able to say sub print_it ($thingie must stringify()) {print $thingie.stringify();} Hmm... there's a certain elegance to being able to specify one or two requirements directly in a signature. Also: in the first of these two, would classof($thingie) actually have to have Stringify as a role, or would it be reasonable to instead say that classof($thingie) must meet Stringify's demands? The latter would require more work on the compiler's part, but would be considerably more flexible. Perhaps "Stringify $thingie" requires that the Stringify role must actually be used, while something like "$thingie like Stringify" would only require that Stringify's demands be met? ===== Jonathan "Dataweaver" Lang __________________________________ Do you Yahoo!? Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes http://hotjobs.sweepstakes.yahoo.com/signingbonus