Как вы анализируете методы MooseX :: Method :: Signatures, чтобы увидеть, какие аргументы они принимают? - PullRequest
2 голосов
/ 16 ноября 2011

Я использую MooseX :: Declare и методы, которые используют MooseX :: Method :: Signatures. Допустим, у меня есть класс 'foo' с методом 'bar', и я реализовал его следующим образом:

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

Теперь я хочу написать интерфейсный интерфейс, который спрашивает пользователя, какой класс он хочет использовать, какой метод в этом классе он хочет использовать, а затем какие опции для метода он хочет. Я могу сделать первые две вещи, поэтому предположим, что пользователь выбрал класс foo и метод bar.

Но как мне узнать, что панель методов принимает строку в качестве первого аргумента и пару значений ключа flag => bool, которая по умолчанию равна 1? Мой код должен знать это, поэтому я могу попросить пользователя предоставить эти вещи.

1 Ответ

6 голосов
/ 16 ноября 2011

Сначала получите метаобъект метода:

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 named_params и positional_params, как подробно описано в Parse :: Method :: Signatures :: Sig docs .

Чтобы найти parsed_signature, мне пришлось взглянуть на источник для MooseX :: Method :: Signatures :: Meta :: Method … поэтому будьте осторожны, когда вы делаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...