如果属性不存在,如何使用perl自动加载和Moose::Meta::Class动态添加属性?
我正在尝试向如果属性不存在,如何使用perl自动加载和Moose::Meta::Class动态添加属性?,perl,code-generation,moose,Perl,Code Generation,Moose,我正在尝试向Class1Resource1属性添加值为test。 但是它不起作用。我的代码有什么问题 package Class1; use Moose; sub AUTOLOAD { my $self = shift; our $AUTOLOAD; my $unknown_method_name = (split(/::/, $AUTOLOAD))[-1]; require Class2; # generator class Class2->ge
Class1
Resource1
属性添加值为test
。
但是它不起作用。我的代码有什么问题
package Class1;
use Moose;
sub AUTOLOAD {
my $self = shift;
our $AUTOLOAD;
my $unknown_method_name = (split(/::/, $AUTOLOAD))[-1];
require Class2; # generator class
Class2->generate_one($self, $unknown_method_name);
}
package Class2;
use Moose;
sub generate_one {
my ($self, $object, $p) = @_;
$object->meta->add_attribute(
$p => {
is => 'ro',
default => 'test',
lazy => 1
}
);
}
package main;
my $a = Class1->new;
warn $a->Resource1; # must be 'test' but showing Moose::Meta::Attribute=HASH(0x333ca10)
您生成了属性及其访问器,但忘记调用访问器。所以代码在第一次调用时不返回任何内容 更正的示例:
子自动加载{
我的$self=shift;
我们的$AUTOLOAD;
我的$unknown_method_name=(拆分(/:/,$AUTOLOAD))[-1];
需要类别2;#发电机类别
Class2->生成一个($self,$unknown\u方法\u名称);
返回$self->$unknown\u方法\u名称(@);
}
这里有几句话可以解释