当BUILD相位器被调用时,它会覆盖Perl6默认属性分配.假设我们必须使用BUILD移相器,就像我们在这个模块中那样(那是我遇到这个问题的地方).在该阶段为属性分配值的方式是什么?我用过这个
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' );
Run Code Online (Sandbox Code Playgroud)
我得到了这个错误
Too many positionals passed; expected 1 argument but got 2
Run Code Online (Sandbox Code Playgroud)
其他组合$!或$.,直接赋值,将属性声明为rw(相同错误)会产生不同类型的错误.这可能只是一个语法问题,但我找不到解决方案.任何帮助将不胜感激.
你的例子中有两个错误,就像我看到的那样.首先,如果您希望属性可写,则需要对其进行标记is 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")
Run Code Online (Sandbox Code Playgroud)