【发布时间】:2016-05-13 10:35:59
【问题描述】:
有没有办法将属性的值限制为继承自某个特定类的类名?
has thing_class => (
??? => Some::Base::Class,
);
这里thing_class 的有效值应该是Some::Base::Class 或从它派生的类。 isa 不适合使用,因为这要求属性是 Some::Base::Class 的实例化实例。
【问题讨论】:
有没有办法将属性的值限制为继承自某个特定类的类名?
has thing_class => (
??? => Some::Base::Class,
);
这里thing_class 的有效值应该是Some::Base::Class 或从它派生的类。 isa 不适合使用,因为这要求属性是 Some::Base::Class 的实例化实例。
【问题讨论】:
类型限制由isa 施加。当然,你需要先定义一个合适的类型约束。
use Moose::Util::TypeConstraints;
subtype 'FooBarSubclassName',
as 'Str',
where { $_->isa('Foo::Bar') };
no Moose::Util::TypeConstraints;
has thing_class => (
isa => 'FooBarSubclassName',
);
【讨论】: