你如何反省MooseX :: Method :: Signatures方法来看看它们采用了什么参数?

时间:2011-11-16 11:48:53

标签: perl moose method-signature

我正在使用MooseX :: Declare和方法,它们使用MooseX :: Method :: Signatures。假设我有一个带有'bar'方法的'foo'类,我已经实现了它:

class foo {
    method bar (Str $str, Bool :$flag = 1) {
        # ....
    }
}

我现在想要编写一个前端界面,询问用户他们想要使用哪个类,他们想要使用哪个类,然后选择他们想要的方法。我可以做前两件事,所以让我们说用户现在选择了类foo和方法栏。

但是我怎么知道方法栏把一个字符串作为第一个参数,一个flag => bool键值对默认为1?我的代码需要知道这一点,然后我可以要求用户提供这些东西。

1 个答案:

答案 0 :(得分:6)

首先,获取方法元对象:

my $method = $class->meta->find_method_by_name( $method_name );

然后,确保它是一个标志性的方法:

confess "not method with a signature!"
  unless $method->isa('MooseX::Method::Signatures::Meta::Method');

获得签名:

my $sig = $method->parsed_signature;

然后按照the Parse::Method::Signatures::Sig docs中的详细说明查看$sig的{​​{1}}和named_params

要查找positional_params,我必须查看source to MooseX::Method::Signatures::Meta::Method ...所以当你这样做时要小心。