在同一个软件包中使用MooseX::Declare和MooseX::MethodAttributes时,在使用以下方法获取方法属性时会出错:
$attrs = $class->meta->get_method('moosey')->attributes;
我收到错误:
Can't locate object method "attributes" via package "MooseX::Method::Signatures::Meta::Method"
我试着查看模块MooseX::MethodAttributes
的代码,我能够得到
这些方法可以解决属性:
my $attribute_list = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_list;
my $attribute_map = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_map;
这里的问题是模块使用一个数字指针指向我不知道如何生成以获取特定方法属性的属性。
如果我运行此代码:
my $attribute_list = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_list;
my $attribute_map = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_map;
print Dumper($attribute_list);
print Dumper($attribute_map);
我收到了这个调试信息:
$VAR1 = [
70862136
];
$VAR1 = {
'70862136' => [
'AttrMoosey',
'AttrBoosy(path/app)',
'AttrCoosy'
]
};
那么在这些模块被修复以便相互协作之前,我怎样才能获得这种情况下的方法属性。
以下是我用于测试的代码:
package Moosey;
use Moose;
use MooseX::Declare;
use MooseX::MethodAttributes;
class Moosey is mutable {
method moosey ($name, $email) : AttrMoosey AttrBoosy(path/app) AttrCoosy { print "moosey called"; }
}
1;
use Data::Dumper;
my $class = Moosey->new;
my $method = $class->meta->get_method('moosey');
# this does not work:
# my $attrs = $class->meta->get_method('moosey')->attributes;
my $attribute_list = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_list;
my $attribute_map = $class->meta->get_method('moosey')->associated_metaclass()->_method_attribute_map;
print Dumper($attribute_list);
print Dumper($attribute_map);