3

Mouseの役割を構成するMooseクラスがあります。

package My::Moose::Class;
use Moose;
has 'mouse_obj' => (
    is   => 'ro',
    does => 'NotMy::Mouse::Role',
);

package NotMy::Mouse::Role;
use Mouse::Role;

package NotMy::Mouse::Class;
use Mouse;
with 'NotMy::Mouse::Role';

また、MooseではMouseの役割がタイプとして認識されないため、これはエラーになります。

my $f = My::Moose::Class->new( mouse_obj => NotMy::Mouse::Class->new );

属性(mouse_obj)は、次の理由でタイプ制約を渡しません:値NotMy :: Mouse :: Class = HASH(0x23932dc)(isa NotMy :: Mouse :: Roleではない)の'NotMy :: Mouse::Role'の検証に失敗しました..。。

MouseオブジェクトをMooseに変更せずにこれを機能させる方法は何ですか?

4

1 に答える 1

1

これを行う1つの方法は、必要なチェックを行うカスタム型制約を作成することです。

use Moose::Util::TypeConstraints;

subtype 'MouseRole'
    => as 'Object'
    => where sub { $_->does('NotMy::Mouse::Role') };

has 'mouse_obj' => (
    is   => 'ro',
    isa => 'MouseRole', # "isa" not "does"!
);
于 2012-06-24T00:43:45.940 に答える