我创建了一个包含用于函数重载的multi
定义的类,但是当我尝试调用该类和重载的方法时,它会引发错误。可以运行以产生此错误的工作示例如下所示:
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);
错误:
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
我可能做错了,有人可以指出我正确的方法吗?
编辑:我正在有效地尝试将其作为一个模块,可以用于其他用途。
答案 0 :(得分:8)
您需要在self
方法之前添加test
关键字:
class Test
{
multi method test(@data) {
return self.test(@data, @data.elems);
}
multi method test(@data, $length) {
return 0;
}
}
my @t = 't1', 't2', 't3';
say Test.test(@t);
注释:在Perl 6类中,使用method
关键字声明一个方法。
答案 1 :(得分:6)
出现no such method
错误的原因是,除非另有说明,否则multi
的默认值为sub
。您需要multi method test
答案 2 :(得分:2)
其他答案必须有助于解释.relim()
的用法,但是可选参数可能是获得相同结果的更简单方法:
ax.ignore_existing_data_limits = True
ax.update_datalim(scatter.get_datalim(ax.transData))
ax.autoscale_view()