perl6 – Perl 6中只有一个参数的构造函数
发布时间:2020-12-15 22:06:12 所属栏目:大数据 来源:网络整理
导读:我想覆盖new,这样我的类只能通过将一个参数传递给构造函数来创建,不多也不少. class MyClass { has $.var1; method new($var1) { return MyClass.new(var1 = $var1); }}my $my_class1 = MyClass.new(33);say $my_class1.var1; 错误是: Too few positionals
我想覆盖new,这样我的类只能通过将一个参数传递给构造函数来创建,不多也不少.
class MyClass { has $.var1; method new($var1) { return MyClass.new(var1 => $var1); } } my $my_class1 = MyClass.new(33); say $my_class1.var1; 错误是: Too few positionals passed; expected 2 arguments but got 1 in method new at test1.pl6:28 in method new at test1.pl6:28 in block <unit> at test1.pl6:33 怎么了? 解决方法
自定义构造函数需要调用
bless ,即
class MyClass { has $.var1; method new($var1) { return self.bless(var1 => $var1); } } 有一些事情可以改进,例如 > one可以添加一个显式的invocant参数并使用:U在实例对象上调用时使.new()失败 把它们放在一起,我们最终得到了 class MyClass { has $.var1; method new(MyClass:U: $var1) { self.bless(:$var1); } } 至于你的错误来自哪里: 您的方法new被声明为采用位置参数(由于隐式调用,总计数为2个预期参数),但调用MyClass.new(var1 => $var1)仅传递了一个命名参数.请注意,所述方法是您的类中唯一存在的.new(),因此如果调用实际上有效,那么您最终会得到无限递归! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |