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

Reply via email to