我尝试将Perl闭包转换为Moo访问器,如以下代码所示。不幸的是,代码可以在Moose上运行,但在Moo上抛出了异常。
请帮助我用Perl闭包定义的读和写访问器(不是只读取和存储简单值的默认访问器,而是读和写应该调用我的闭包的访问器)来编写Moo代码。
#!/usr/bin/perl
package X;
use Moo;
my $BusinessClass = "X";
my $Key = 'zz';
no strict 'refs';
*{"${BusinessClass}::access_$Key"} = sub { "Modified $Key" };
has $Key => ( is => 'rw',
required => 0,
accessor => { $Key => \&{"${BusinessClass}::access_$Key"} },
# predicate => { "has_$Key",\&{"${BusinessClass}::access2_$Key"} },
);
my $obj = X->new;
print $obj->zz, "\n";发布于 2016-09-09 00:39:56
Moo的has似乎没有accessor选项。
#!/usr/bin/perl
package X;
use Moo;
use feature qw( say );
for my $attr_name (qw( zz )) {
eval(<<'__EOS__' =~ s/ATTR_NAME/$attr_name/gr) or die($@);
sub ATTR_NAME {
my $self = shift;
@_ ? $self->_set_ATTR_NAME($_[0]) : $self->_get_ATTR_NAME()
}
1; # No exception
__EOS__
has $attr_name => (
is => 'rw',
required => 0,
reader => '_get_'.$attr_name,
writer => '_set_'.$attr_name,
);
}
my $obj = X->new;
$obj->zz("abc");
say $obj->zz;未经测试。
https://stackoverflow.com/questions/39395477
复制相似问题