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

perl – 驼鹿对象中构建器子例程的参数

发布时间:2020-12-15 22:05:45 所属栏目:大数据 来源:网络整理
导读:我目前正在将构建器方法委托给扩展我的一个基类的所有对象.我面临的问题是我需要所有对象来读取自身的属性或传递一个值. # In Role:has 'const_string' = ( isa = 'Str',is = 'ro',default = 'test',);has 'attr' = ( isa = 'Str',builder = '_builder',);re
我目前正在将构建器方法委托给扩展我的一个基类的所有对象.我面临的问题是我需要所有对象来读取自身的属性或传递一个值.
#  In Role:
has 'const_string' => (
    isa     => 'Str',is      => 'ro',default => 'test',);

has 'attr' => (
    isa     => 'Str',builder => '_builder',);

requires '_builder';


#  In extending object  -  desired 1
sub _builder {
    my ($self) = shift;
    #  $self contains $self->const_string
 }

#  In extending object  -  desired 2
sub _builder {
    my ($arg1,$arg2) = @_;
    #  $args can be passed somehow?
 }

这是目前可能的还是我将不得不以其他方式做到这一点?

解决方法

您不能将参数传递给属性构建方法.它们由Moose内部自动调用,并且只传递一个参数 – 对象引用本身.构建器必须能够根据它在$self中看到的内容或其有权访问的环境中的任何其他内容返回其值.

你想要传递给建造者的是哪种论点?您可以将这些值传递给对象构造函数并将它们存储在其他属性中吗?

# in object #2:
has other_attr_a => (
    is => 'ro',isa => 'Str',);
has other_attr_b => (
    is => 'ro',);

sub _builder
{
    my $self = shift;
    # calculates something based on other_attr_a and other_attr_b
}

# object #2 is constructed as:
my $obj = Class2->new(other_attr_a => 'value',other_attr_b => 'value');

另请注意,如果您具有基于其他属性值构建的属性,则应将它们定义为惰性,否则构建器/默认值将立即在对象构造上运行,并且以未定义的顺序运行.将它们设置为懒惰将延迟它们的定义,直到它们首次需要为止.

(编辑:李大同)

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

    推荐文章
      热点阅读