2

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

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

我现在想编写一个前端界面,询问用户他们想要使用什么类,他们想要使用该类的什么方法,以及他们想要的方法的哪些选项。我可以做前两件事,所以假设用户现在选择了类 foo 和方法栏。

但是我如何找出方法 bar 将一个字符串作为第一个参数,以及一个默认为 1 的标志 => bool 键值对?我的代码需要知道这一点,这样我才能要求用户提供这些东西。

4

1 回答 1

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;

然后查看$sig'snamed_paramsParse::Method::Signatures::Sig docspositional_params中的详细说明。

为了找到parsed_signature,我不得不查看MooseX::Method::Signatures::Meta::Method 的源代码......所以当你这样做时要小心。

于 2011-11-16T13:01:11.013 回答