Patrick R. Michaud wrote:
> On Sun, Sep 21, 2008 at 07:02:37PM -0700, Michael G Schwern wrote:
>> I'm pondering what the proper syntax is for a subroutine parameter with both 
>> a
>> trait and a default.  That is...
>>      sub foo ($arg = 42)
>> and
>>      sub foo ($arg is readonly)
>> together in one parameter.  Would that be
>>      sub foo ($arg = 42 is readonly)
>> or
>>      sub foo ($arg is readonly = 42)
>> The first looks ambiguous, what if the trait is meant to apply to the 
>> default?
>> The second looks downright wrong.
> The grammar [1] shows that the second is the correct form -- 
> i.e., default values occur after traits.  (See "token parameter" 
> on or about line 2630.)  I think part of the reason for this is that
> traits appearing after the default value would be applied to the
> default value instead of the parameter.  A few other examples from
> the synopses seem to confirm this pattern:
>   S03:2289:    my Dog $fido is trained is vicious = 1
>   S03:3828:    constant Dog $foo is woof = 123;
>   S06:1558:    constant $pi is approximated = 3;
>   S12:1393:    has SomeType $.prop is rw = 1;
> 1.

Ok, thanks.  That does make sense.

>> PS  Incidentally, it seems silly to have "is rw" but not "is ro".  I keep
>> writing "is ro".
> Yes, we've also run into this problem a few times while working on Rakudo.

I'm finding it so verbose that I'm going with "is ro" in Method::Signatures.

I'm pale as formica, social skills stunted small. But I'm accurate
like a pica, I know the capital of nepal. I'm the nemesis of error,
dreadful diction fears my skills, more inquisitive than Jim Lehrer,
snottier than Beverly Hills.
    -- I.L.O.P. Secret Rap

Reply via email to