【问题标题】:Dynamically generate writer/reader from attribute names in Moose从 Moose 中的属性名称动态生成写入器/读取器
【发布时间】:2017-12-31 10:30:21
【问题描述】:

在 Moose 中,我们可以对实例属性进行限制或添加 getter/setter,如下所示:

has 'color' => (
  is  => 'rw',
  isa => 'Str',
  writer => '_set_color',
);

我的问题是,有没有办法为一组元素动态执行此操作?可以这样做:

has ['color', 'temperature', 'size'] => (
  is  => 'rw',
  isa => 'Str',
);

但是有没有办法为这些项目中的每一个创建自己的编写器(或读取器),例如_set_color, _set_temperature, _set_size?我试图查看以下是否产生了任何见解,但它返回了错误

错误的访问器/读取器/写入器/谓词/更清晰的格式,必须是 HASH 参考

has ['color', 'temperature', 'size'] => (
  is  => 'rw',
  isa => 'Str',
  writer => sub {
    print Dumper(\@_);
    return;
);

我希望得到的是类似的东西(这是行不通的):

has ['color', 'temperature', 'size'] => (
  is  => 'rw',
  isa => 'Str',
  writer => "_set_$_";
);

我需要自定义编写器,所以只使用 Moose 提供的编写器不适合我。

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    has 不是魔法。这只是一个子程序调用。所以这样的事情应该可以工作(未经测试):

    for (qw[colour temperature size]) {
      has $_ => (
        is     => 'rw',
        isa    => 'Str',
        writer => "_set_$_",
      );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多