调用属性的 writer 方法的引用时出现 Perl Moose 异常

标签 perl reference moose writer

我试图将对属性的 writer 方法的引用传递给另一个类方法。显然,自从执行 print 语句后就调用了 setter 方法。但是,会出现以下错误结果:

Attribute (dir) is required, so cannot be set to undef at Test.pm line 51
Test::_validateDir('Test=HASH(0x2270be0)', 'CODE(0x22a90f8)') called at test.pm line 37
Test::BUILD('test_moose=HASH(0x2270be0)', 'HASH(0x1879728)') called at generated method (unknown origin) line 50
Test:new('Test', dir=>'my_bin') called at ./test_moose.pl line 26

是否存在无法引用生成的编写器方法的原因,或者是否有不同或更好的方法在 Moose 中执行此操作?

代码如下:

package Test;
use Moose;
use File::Spec;

has 'dir' => (is => 'ro', isa => 'Str', required => 1, writer '_set_dir',);

sub BUILD {
    my ($self, $hr) = @_;
    $self->_validateDir(\&_set_dir);
}

sub _validate_dir {
    my ($self, $setter) = @_;
    my $dir = File::Spec->rel2abs($self->dir, '/home/me');
    if (! -e $dir) {
       print "creating directory\n";
       #create directory
    }
    &$setter($dir);
}

最佳答案

将二传手作为常规替补来调用是否正确?您不应该将 $self 作为第一个参数传递吗?

关于调用属性的 writer 方法的引用时出现 Perl Moose 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557384/

相关文章:

perl - 什么可能导致 perl 打印错误?

perl - 在perl中转换jis解码/编码

ruby-on-rails - 为has_many 和belongs_to 创建Rails 模型关联

perl - 如何在 Moose 中定义默认属性属性值?

perl - 在 Moose 中处理多个继承的构造函数

mysql - perl错误处理中加载数据infile mysql语句

regex - 基于正则表达式在 Perl 中的 foreach 中制作数组的动态哈希

c - 通过引用将 char** 传递给函数

ios - 在一流的 init 中创建时,类中的弱引用返回 nil

perl - 使用或不使用 namespace::sweep 和/或 Modern::Perl