Henry Baragar Henry.Baragar-at-instantiated.ca |Perl 6| wrote:
I think that in your "Example 1", that you may be making too making too much of a distinction between "$a" and "@a". That is:
        sub f2(@y) {...}
has exactly the same signature as sub f2($x is Array) {...} In other words, they both take a single argument that must be of type Array. Hence, @y and $x work the same "beneath the surface" and there is no extra level of indirection.

But... $x has an Item container, and @y doesn't !




Now that we are viewing parameters as providing constraints rather than contexts, we get a different view on your "Example 2". I made your example more concrete and ran it through rakudo, yielding:
        > sub f1 ($x) {say $x.WHAT}; f1(Nil);
        Nil()
        > sub f2 (@y) {say @y.WHAT; say +...@y}; f2(Nil);
        Array()
        1
        >
Why doesn't +...@y produce 0, not 1?  It's an empty list.
And if the argument types are viewed as constraints only, denoting whether the call is acceptable but not changing anything about it, and f2 is written as way above, the two functions would produce the same output. Clearly they're not.


See, no problems with f2().

Good.  Thanks.


Reply via email to