Perl MooseX :: MethodAttributes获取方法属性

时间:2014-07-13 16:17:47

标签: perl moose

在同一个软件包中使用MooseX::DeclareMooseX::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);

1 个答案:

答案 0 :(得分:1)

this answer中所述,需要修复MooseX :: MethodAttributes以尊重原始方法元类,而不是强加一个。