我正在使用MooseX :: Declare和方法,它们使用MooseX :: Method :: Signatures。假设我有一个带有'bar'方法的'foo'类,我已经实现了它:
class foo {
method bar (Str $str, Bool :$flag = 1) {
# ....
}
}
我现在想要编写一个前端界面,询问用户他们想要使用哪个类,他们想要使用哪个类,然后选择他们想要的方法。我可以做前两件事,所以让我们说用户现在选择了类foo和方法栏。
但是我怎么知道方法栏把一个字符串作为第一个参数,一个flag => bool键值对默认为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 ...所以当你这样做时要小心。