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

前端之家收集整理的这篇文章主要介绍了perl – 在Moose中,如何在设置任何时候修改属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果你有一个属性需要在任何时间被修改的时候被修改,那么在这个例子中完成的是,有没有一个光滑的方式来做这个,而不是自己编写访问器,直接用$ 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

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

原文链接:https://www.f2er.com/Perl/173002.html

猜你在找的Perl相关文章