oop – 为BUILD对象的BUILD移相器中的属性赋值
发布时间:2020-12-15 21:46:13 所属栏目:大数据 来源:网络整理
导读:调用BUILD移相器时,它会覆盖Perl6中的默认属性赋值.假设我们必须使用BUILD移相器,就像我们在 this module中所做的那样(那是我遇到这个问题的地方).在该阶段为属性分配值的方式是什么? 我用过这个 class my-class { has $.dash-attribute; submethod BUILD(*
调用BUILD移相器时,它会覆盖Perl6中的默认属性赋值.假设我们必须使用BUILD移相器,就像我们在
this module中所做的那样(那是我遇到这个问题的地方).在该阶段为属性分配值的方式是什么?
我用过这个 class my-class { has $.dash-attribute; submethod BUILD(*%args) { for %args.kv -> $k,$value { self."$k"( $value ); } } }; my $my-instance = my-class.new( dash-attribute => 'This is the attribute' ); 我得到了这个错误 Too many positionals passed; expected 1 argument but got 2 $!或$.,直接赋值的其他组合,将属性声明为rw(相同的错误)会产生不同类型的错误.这可能只是一个语法问题,但我找不到解决方案.任何帮助将不胜感激. 解决方法
你的例子中有两个错误,就像我看到的那样.首先,如果您希望属性可写,则需要将其标记为rw.其次,更改属性的值是通过赋值完成的,而不是通过将新值作为参数来完成.
所以我认为代码应该是: class my-class { has $.dash-attribute is rw; submethod BUILD(*%args) { for %args.kv -> $k,$value { self."$k"() = $value; } } }; my $my-instance = my-class.new( dash-attribute => 'attribute value' ); dd $my-instance; # my-class $my-instance = my-class.new(dash-attribute => "attribute value") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |