我需要使用 Moose 对象进行多方法调度。我正在使用Class::Multimethods::Pure进行此操作。我选择了这个而不是MooseX::MultiMethods,因为它依赖于MooseX::Method::Signatures,它无法安装在我的系统上,因为它没有通过测试。我不介意您是否有其他建议方法。
以下适用于类型和子类型:
package Foo::Type;
use Moose;
package Foo::SubType;
use Moose;
extends 'Foo::Type';
package main;
use Class::Multimethods::Pure;
multi hello => ('Foo::Type') => sub {
my ( $foo ) = @_;
print $foo;
};
hello( Foo::SubType->new );
但是我现在需要处理的场景是声明的类型实际上是 Moose 角色:
package Foo::Role;
use Moose::Role;
package Foo::Type;
use Moose;
with 'Foo::Role';
package main;
use Class::Multimethods::Pure;
multi hello => ('Foo') => sub {
my ( $foo ) = @_;
print $foo;
};
hello( Foo::Type->new );
但这无法识别角色:
No method found for args (Foo::Type=HASH(0x22ac854))
文档说它可以通过各种方式进行扩展,包括添加 Perl 6-ish 角色。但这对我来说有点粗略,我正在寻找一个更详细的例子。有没有人试过这个?