>> On 10/1/18 3:37 PM, Donald Hunter wrote:
>> > Methods don't accept [], values that are positional do that.
>> Is your distinction that [] is actually a routine in itself
>> and not part of the method? And I am lumping them together?
On 10/2/18 12:18 AM, Laurent Rosenfeld via perl6-users wrote:
> Yes, [] acts on the result (a positional, e.g. a list) returned by
> function or method, it does not act on the function or method itself.
"acts on the result" is a beautiful way to state it.
Just to be clear, the fact that it acts on the result of a method
or function doesn't mean a method or function or result has to
be involved. Consider:
@array[0]
A variable `@array` may well not be a result of anything.
--------
The thing on the left of a postfix `[...]` may not even do the `Positional`
role.
The postfix `[]` operattor turns into an an `AT-POS` method call if
the thing on the left is a `Positional`. The Positional role defines
an `AT-POS` method. Anything that does the `Positional` role will
work as the left hand side of a postfix `[...]`.
But other types that *don't* do the `Positional` role can still have
an `AT-POS` method and a postfix `[...]` will work with them too.
------
In particular the built in `Any` has an `AT-POS`.
So you can append a `[...]` to any single thing and it'll work:
42[0]
The above results in 42.
42[1]
yields "Index out of range. Is: 1, should be in 0..0"
-----
So, to recap: a postfix `[]` acts on whatever is on its left,
pulling out elements from the thing on its left, treated as
a list like thing, with the elements selected according to
the index(es) inside the brackets.
--
raiph