加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读