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

perl – 在Moose中,如何在设置任何时候修改属性?

发布时间:2020-12-15 21:18:27 所属栏目:大数据 来源:网络整理
导读:如果你有一个属性需要在任何时间被修改的时候被修改,那么在这个例子中完成的是,有没有一个光滑的方式来做这个,而不是自己编写访问器,直接用$ self的内容来填充它。 package Foo;use Moose;has 'bar' = ( isa = 'Str',reader = 'get_bar',);sub set_bar {
如果你有一个属性需要在任何时间被修改的时候被修改,那么在这个例子中完成的是,有没有一个光滑的方式来做这个,而不是自己编写访问器,直接用$ self的内容来填充它。
package Foo;
use Moose;

has 'bar' => (
    isa => 'Str',reader => 'get_bar',);

sub set_bar {
    my ($self,$bar) = @_;
    $self->{bar} = "modified: $bar";
}

我认为触发,但似乎需要相同的方法。

在Moose年的自我认为的糟糕做法中直接使用哈希引用工作,还是担心无问题?

解决方法

我不知道你需要什么样的修改,但是您可以通过使用类型强制来实现所需要的功能:
package Foo;
use Moose;

use Moose::Util::TypeConstraints;

subtype 'ModStr' 
    => as 'Str'
    => where { /^modified: /};

coerce 'ModStr'
    => from 'Str'
    => via { "modified: $_" };

has 'bar' => ( 
    isa => 'ModStr',is  => 'rw',coerce => 1,);

如果您使用这种方法,并不是所有的值都将被修改。任何通过验证作为ModStr的内容将被直接使用:

my $f = Foo->new();
$f->bar('modified: bar');  # Set without modification

这个弱点可能还是可以使这种方法不可用。在正确的情况下,甚至可能是一个优势。

(编辑:李大同)

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

    推荐文章
      热点阅读