I've created a class which contains multi
definitions for function overloading, however when I try to call the class and the overloaded method, it throws an error. A working example which can be run to produce this error is shown below:
class Test
{
multi test(@data) {
return test(@data, @data.elems);
}
multi test(@data, $length) {
return 0;
}
}
my @t = 't1', 't2', 't3';
say Test.test(@t);
Error:
No such method 'test' for invocant of type 'Test'. Did you mean any of these?
List
Set
gist
list
in block <unit> at test.p6 line 13
I may be doing this wrong, can someone point me to the correct way to do this?
Edit: I'm effectively trying to make this a module, which I can use for other things.
The reason you're getting the
no such method
error is thatmulti
defaults tosub
unless told other wise. You needmulti method test
Other answers have to helped explain the usage for
multi method
but optional parameters might be a simpler way to get the same result:You need add the
self
keyword before yourtest
method:note: In Perl 6 class, use
method
keyword to declare a method.