首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Moo,动态生成的访问器

Perl Moo,动态生成的访问器
EN

Stack Overflow用户
提问于 2016-09-08 23:56:25
回答 1查看 246关注 0票数 1

我尝试将Perl闭包转换为Moo访问器,如以下代码所示。不幸的是,代码可以在Moose上运行,但在Moo上抛出了异常。

请帮助我用Perl闭包定义的读和写访问器(不是只读取和存储简单值的默认访问器,而是读和写应该调用我的闭包的访问器)来编写Moo代码。

代码语言:javascript
复制
#!/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";
EN

回答 1

Stack Overflow用户

发布于 2016-09-09 00:39:56

Moo的has似乎没有accessor选项。

代码语言:javascript
复制
#!/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;

未经测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39395477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档