On Wed, Mar 12, 2003 at 12:18:33PM +1100, Damian Conway wrote:
> Various folks have suggested that the default assignment syntax:
> 
>     sub foo(?$bar is copy = 1) {...}
> 
> be considered merely a shorthand for something like:
> 
>     sub foo(?$bar is copy is default(1)) {...}
> 
> thereby allowing:
> 
>     sub foo(?$bar is default(1) is copy ) {...}
> 
> and hence (mirabile dictu):
> 
>     sub foo(?$bar = 1 is copy ) {...}
> 
> 
> The design team has already considered this idea, and my problem
> with it then (and now) is that it's inconsistent with other forms
> of variable declaration:
> 
>         my sub foo( ?$bar is constant = 1 ) {...}   # OKAY
>         my           $bar is constant = 1;          # OKAY
> 
>         my sub foo( ?$bar = 1 is constant ) {...}   # OKAY
>         my           $bar = 1 is constant;          # KABOOM!
> 
> and thereby lays a cognitive trap for programmers.

Does it work if the = shorthand is only allowed at the rightmost end of
the specification.

ie

  my sub foo( ?$bar = 1 is constant ) {...}

is also defined to be a "KABOOM!" ?

Hence you're allowed to write "is default(42)" as "= 42" only if it's the
last trait. (Is that the right word)

But this feels bad because it's a special case. And an ordering related
special case, which seems to feel more bad to me.

Nicholas Clark

Reply via email to