Можно ли использовать MooseX :: Method :: Signatures с классами, не относящимися к Moose? - PullRequest
3 голосов
/ 18 января 2012

Я попробовал это со следующим:

package Foo;
sub new {
    my ($type) = @_;
    return bless {}, $type;
}

package Bar;
use Moose;

package Baz;
use Moose;
use MooseX::Method::Signatures;

method exec1 (Foo $f, Bar $b) {
    ...;
}
method exec2 ($f where {$_->isa('Foo')}, Bar $b) {
    ...;
}

Я обнаружил, что exec2 может работать, но для exec1 есть ошибка времени компиляции.Та же ошибка возникает, если Foo является объектом Mouse (это классы, которые я не могу изменить).

'Foo' could not be parsed to a type constraint - maybe you need to pre-declare the type with class_type at C:/strawberry/perl/site/lib/Parse/Method/Signatures/TypeConstraint.pm line 74

Но есть ли способ, которым он может работать с подписью exec1?

Ответы [ 2 ]

5 голосов
/ 18 января 2012

Добавьте это до объявления метода:

use Moose::Util::TypeConstraints;
BEGIN { class_type 'Foo'; }

Ошибка была довольно ясной, для MXMS в любом случае;)

2 голосов
/ 18 января 2012

Может быть Метод :: Подписи будут работать на вас, особенно если вы не используете Moose и вам нужны только подписи.

...