Perl 为什么自定义类型约束错误消息的尝试失败?

Perl 为什么自定义类型约束错误消息的尝试失败?,perl,moose,Perl,Moose,以下构造创建了一个类型约束,当由于未传递约束而拒绝某个属性时,该约束按预期运行(设置属性时检查“Roles::Thing”角色),我希望出现自定义错误消息“nota Thing”;但是,仍会给出默认错误消息。我做错了什么 role_type 'DoesThing', { role => 'Roles::Thing', message => sub { "Not a thing." } }; 更新:我在最初的帖子中没有提供足够的上下文。我尝试使用新类型的方式是: has

以下构造创建了一个类型约束,当由于未传递约束而拒绝某个属性时,该约束按预期运行(设置属性时检查“Roles::Thing”角色),我希望出现自定义错误消息“nota Thing”;但是,仍会给出默认错误消息。我做错了什么

role_type 'DoesThing', {
   role => 'Roles::Thing',
   message => sub { "Not a thing." }
};
更新:我在最初的帖子中没有提供足够的上下文。我尝试使用新类型的方式是:

has things => (
  isa => 'ArrayRef[DoesThing]'
);

类型验证按预期工作;但是,我仍然会收到默认的错误消息。我的自定义“Not a thing”错误消息没有像我预期的那样传播。

错误消息是您在
ArrayRef
类型中得到的,而不管您在其中期望什么

要获取自定义错误消息,您需要将
ArrayRef
合并到类型声明中:

subtype 'ArrayOfThings', 
    as 'ArrayRef[Roles::Thing]', 
    message { 'Not an array of things' };