perl - Moose属性如何“扮演”鼠标角色?

标签 perl moose

我有一个构成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中鼠标角色未被识别为类型:

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



属性(mouse_obj)不通过类型约束,因为:验证值为NotMy :: Mouse :: Class = HASH(0x23932dc)的'NotMy :: Mouse :: Role'失败(不是isa NotMy :: Mouse :: Role),位于...


有哪些方法可以在不将Mouse对象更改为Moose的情况下正常工作?

最佳答案

您可以执行此操作的一种方法是创建一个自定义类型约束,该约束可以执行所需的检查。

use Moose::Util::TypeConstraints;

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

has 'mouse_obj' => (
    is   => 'ro',
    isa => 'MouseRole', # "isa" not "does"!
);

关于perl - Moose属性如何“扮演”鼠标角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10810171/

相关文章:

perl - 如何将 Moose 方法修饰符应用于基于方法属性的方法?

perl - 如何在 Moose 中将类变量声明为 float ?

linux - TAP::Harness perl 测试 tee 输出

perl - 是否有将 .bin 文件转换为 .pem 文件的 perl 模块

perl - 在 Catalyst 中使用 Plack::Middleware 兼容异常时缺少日志输出

perl - 我可以使用什么 Perl 模块来测试 CGI 输出的常见错误?

perl - 如何在运行时替换 Moose 对象的方法?

Perl 模块层次结构和构建要求

perl - 如何(继续)学习 Moose 以很好地使用它 "fairly"?

python - 属性错误 : module 'cv2.cv2' has no attribute 'TrackerMOSSE_create'