Larry wrote:
> : Can I write that as:
> :
> : sub factorial (Int $n:) {
> : return 1 when 0;
> : return $n * factorial $n;
> : }
>
> As it stands right now, no. Ordinary subs do not allow invocants.
> Arguably, it'd be more consistent if ordinary subs always topicalized
> their first argument. (But blocks have to be handled differently
> since they expect to see the outer binding of $_ unless the block itself
> rebinds $_.) On the other hand, it'd probably work if you threw a
> "multi" in front of the "sub".
>
> Can anyone think of a good reason not to topicalize the first arg
> of ordinary subs these days?
Only that methods no longer topicalize their invocant...they now invocantize it.
Also it's not a good general solution. I can easily imagine situations where
you want the second argument, or the last arg, to be the topic.
I still think it would be better to allow people to explicitly say what they mean:
sub factorial (Int $n is topic) {
return 1 when 0;
return $n * factorial $n;
}
Damian
Thread Previous
|
Thread Next