在PerlMoose中,我可以使用两个具有相互依赖的默认值的属性吗?

在PerlMoose中,我可以使用两个具有相互依赖的默认值的属性吗?,第1张

概述我可以在穆斯这样做吗? package SomeClass;use Moose;has start => ( isa => 'Int', is => 'ro', lazy => 1, default => sub { $_[0]->end },);has end => ( isa => 'Int', is => 'ro', laz 我可以在穆斯这样做吗?

package SomeClass;use Moose;has start => (    isa => 'Int',is => 'ro',lazy => 1,default => sub { $_[0]->end },);has end => (    isa => 'Int',default => sub { $_[0]->start },);...

换句话说,我想要两个名为“start”和“end”的属性,如果只指定了其中一个属性,我希望将另一个属性设置为相同的东西.不指定任何一个是错误.

这种相互依赖的设置是否有效?

解决方法 是的,如果通过验证至少指定了其中一个值来删除无限递归的可能性:

has start => (    ...    predicate => 'has_start',);has end => (    ...    predicate => 'has_end',);sub BUILD{    my $self = shift;    dIE "Need to specify at least one of 'start','end'!" if not $self->has_start and not $self->has_end;}

或者,您可以将检查延迟到默认子设备:

has start => (    ...    predicate => 'has_start',default => sub {        my $self = shift;        dIE "Need to specify at least one of 'start','end'!" if not $self->has_end;        $self->end;    },'end'!" if not $self->has_start;        $self->start;    },);
总结

以上是内存溢出为你收集整理的在Perl / Moose中,我可以使用两个具有相互依赖的默认值的属性吗?全部内容,希望文章能够帮你解决在Perl / Moose中,我可以使用两个具有相互依赖的默认值的属性吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1267885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存