On Tue, Aug 05, 2008 at 05:43:57PM +0800, Audrey Tang wrote:
John M. Dlugosz 提到:
Does that mean that traits can come before the signature? Or should it
be corrected to
method close () is export { ... }
It's a simple typo. Thanks, fixed in r14572.
The strange thing is that we might have to support that order if we want
to allow user-defined operators in the signature, since
sub infix:foo
($x, $y, :$z = $x foo $y bar 1)
is equiv(infix:baz)
{...}
would not know the precedence soon enough to know whether foo is tighter
or looser than bar. Whereas
sub infix:foo
is equiv(infix:baz)
($x, $y, :$z = $x foo $y bar 1)
{...}
could presumably attach that information in a timely fashion to the
definition of the foo operator. 'Course, there are workarounds in the
current scheme of things:
sub infix:foo
is equiv(infix:baz)
is sig(:($x, $y, :$z = $x foo $y bar 1))
{...}
sub infix:foo
($x, $y, :$z = infix:foo($x, $y) bar 1)
is equiv(infix:baz)
{...}
but I'm inclined to simplify in the direction of saying the signature
syntax is just a trait variant so the order doesn't matter. The one
remaining question I see is whether it's possible to declare a sub
with the name is:
sub is is foo {...}
and if so, whether it's possible to have an anonymous sub with traits
and no signature:
sub is foo {...}
I suspect we should bias it towards the first case on the grounds that
you can write the latter with an explicit missing sig sig as
sub ([EMAIL PROTECTED] is rw) is foo {...}
Though, of course, we could solve it the other direction with an
explicit I am not a sub name sub name. Not sure which side least
suprise works on, but the fact that we already have a representation
for no sig seems to say we don't need an explicitly anonymous name.
But maybe such a name would be more generally useful, which would
make it a wash. One obvious candidate for a null name:
sub () is foo {...}
is of course not possible. I suppose we could nudge things in a
direction that
sub is foo {...}
would work, since that'd be much like
state $ = do { I am a fake START block }
But if we allow sub foo then people will wonder what sub @foo means...
Larry