On Thu, Dec 11, 2003 at 04:18:19PM -0700, Luke Palmer wrote: : Larry Wall writes: : > Anyway, this all implies that use of a role as a method name defaults to : > returning whether the type in question matches the subtype. That is, : > when you say : > : > $foo.true : > : > it's asking whether the Boolean property fulfills the true constraint. : > When you say : > : > $bar.red : : So are you saying that, eg. : : class Something does Color {...} : my Something $flib; : : if $flib.red { print "Flib is red" } : if $flib.true { print "Should be an error before now" } : : Since Something doesn't Boolean, true would be a "method not found" : error?
Didn't answer your question. No, because methods that happen to be class names are special, in this worldview. : If that's the case, how do we attach out-of-band properties on objects : that don't expect them, but only some of them (as was the original : intent for properties, IIRC): : : my role onlyonced; : sub onlyonce($arg is rw) { : die "onlyonce called twice on the same value" if $arg.onlyonced; : $arg but= onlyonced; : } : : Either that doesn't work at all, because you get an "onlyonced not : found" error, or it works because onlyonced is a declared role. But : in the latter case I worry about namespace pollution. Okay, maybe I understand your worry now. Are you worried that every object implicitly has boolean methods corresponding to every class/role/property name in scope? I can see where that might cause some heartburn. Larry