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

时间:2015-03-20 22:57:18

标签: perl moose

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

role_type 'DoesThing', {
   role => 'Roles::Thing',
   message => sub { "Not a thing." }
};

更新:我在原帖中没有提供足够的上下文。我尝试使用新类型的方式是:

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

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

1 个答案:

答案 0 :(得分:1)

错误消息是您为ArrayRef类型获得的内容,无论您在其中所期望的是什么。

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

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