【问题标题】:How do you introspect MooseX::Method::Signatures methods to see what arguements they take?您如何内省 MooseX::Method::Signatures 方法以查看它们的论点?
【发布时间】:2011-11-16 11:48:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: perl moose method-signature


    【解决方案1】:

    首先,获取方法元对象:

    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;
    

    然后看看$signamed_paramspositional_params,详见the Parse::Method::Signatures::Sig docs

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

    【讨论】:

    • 谢谢,这正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多