Not in this case. The error happens at run-time. Syntactically the expression
is a valid one because `5(...)` is interpreted as an invocation. Raku
implements invocation protocol a part of which is method 'CALL-ME' defined on a
class:
class Foo {
method CALL-ME(|c) { say "Foo invoked with {c.raku}" }
}
Foo(42, :foo(13));
Foo.new().();
Note that the protocol works for both a type object and its instantiation. This
is what is basically happens in the case of `5(...)`: it falls back to `Int`
and tries to invoke `CALL-ME` on it. One could say that it makes no sense, but
an example with adding a fallback method has been already provided here. And
here is another one follows:
my $foo = 5 but role { method CALL-ME(|c) { say "Int with ", c.raku } };
$foo(13);
The currently produced error, unfortunately, is confusing for beginners. But as
soon as one gains more experience with Raku it makes clear sense instantly.
Best regards,
Vadim Belman
> On Mar 2, 2021, at 9:26 AM, Parrot Raiser <[email protected]> wrote:
>
>> Doing so would, of course, be a very bad idea. But still, you _could_.
>
> Something of an understatement, I think. :-)*
>
> Seriously, this made me wonder if inscrutable error messages might be
> clarifed by a (reverse) trace of the last few steps in parsing. That
> would show you what the compiler thought ir was doing.
>
> Would that be a) reasonably practical to implement, and b)
> sufficiently useful to justify the effort?
>