sbs*_*sbs 2 perl moose method-signature
我正在使用MooseX :: Declare和方法,它们使用MooseX :: Method :: Signatures.假设我有一个带有'bar'方法的类'foo',我已经实现了它:
class foo {
method bar (Str $str, Bool :$flag = 1) {
# ....
}
}
Run Code Online (Sandbox Code Playgroud)
我现在想要编写一个前端界面,询问用户他们想要使用哪个类,他们想要使用哪个类,然后选择他们想要的方法.我可以做前两件事,所以让我们说用户现在选择了类foo和方法栏.
但是我如何找出方法栏将一个字符串作为第一个参数,并且一个flag => bool键值对默认为1?我的代码需要知道这一点,然后我可以要求用户提供这些东西.
首先,获取方法元对象:
my $method = $class->meta->find_method_by_name( $method_name );
Run Code Online (Sandbox Code Playgroud)
然后,确保它是一个标志性的方法:
confess "not method with a signature!"
unless $method->isa('MooseX::Method::Signatures::Meta::Method');
Run Code Online (Sandbox Code Playgroud)
得到它的签名:
my $sig = $method->parsed_signature;
Run Code Online (Sandbox Code Playgroud)
然后看$sig的named_params,并positional_params在详细的解析::方法::签名::西格文档.
为了找到parsed_signature,我不得不查看MooseX :: Method :: Signatures :: Meta :: Method的源代码 ......所以当你这样做时要小心.