私はMooseオブジェクトでマルチメソッドディスパッチが必要です。私はClass::Multimethods::Pureでこれをやっています。 MooseX::MultiMethodsの代わりにこれを選んだのは、テストに失敗したために私のシステムにインストールできないMooseX::Method::Signaturesに依存するからです。私はあなたが示唆する別のアプローチを持っているかどうか気にしません。Class :: Multimethods :: Pureを拡張する方法ムースの役割を認識するには?
次のタイプおよびサブタイプと正常に動作します:
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);
しかし、宣言された型は、実際にムースの役割です私は今処理する必要シナリオは次のとおりです。
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))
documentationは、エクステンションPerl 6-ishロールの追加など、さまざまな方法で実行できます。しかし、それは私のために少し不気味であり、私はより詳細な例を探しています。誰もこれを試しましたか?