Paul Seamons skribis 2005-04-25  9:52 (-0600):
> a way back

What is this "way back" you repeatedly mention?

If it is having a name for the invocant, then there has always been one:

    method foo ($self:) {
        for (1..10) {
            $self.method(.sqrt)
        }
    }

Or, well, two:

    method foo {
        my $self := $_;
        ...
    }

Three, even:

    method foo {
        my $self = \$_;
        for (1..10) {
            $$self.method(.sqrt)
        }
    }

And probably even more. TAMT0WTDI! :)

> Now if we can introduce another way back so that we can always get to the 
> invocant if we want to, then I'd say lets leave .meth always working on $_ .  
> It does have beauty and simplicity.

Agreed!

>      $^.meth;  # is the invocant
>      $^1.meth; # is the first invocant
>      $^2.meth; # is the second invocant

I don't understand the concept of multiple invocants. How does that
work?

$^ as an alias for the invocant works for me, because "" sorts before
anything else, and the invocant's just the 0th argument.

> The rules then are simple.  .meth always operates on $_.  $_ is always the 
> current topic.  $_ defaults to the invocant of the method.

Yes! The problem isn't that this hasn't already been thought of -- it is
the current spec even.

However, the discussion is about changing these simple, clear, and
useful rules to a more complex situation of choosing a default based on
what the default will be used for, making the default for methods the
invocant rather than $_. I hate those plans and would love to see the
current spec, that is as you decribe above, implemented in the "final"
version.

(Or well, I believed this was the spec until I tried finding it. I can
find the stuff about .method defaulting to $_ in S12, but $_ being an
alias for the invocant is harder to find.)


Juerd
-- 
http://convolution.nl/maak_juerd_blij.html
http://convolution.nl/make_juerd_happy.html 
http://convolution.nl/gajigu_juerd_n.html

Reply via email to