为什么这种尝试自定义类型约束的错误消息会失败?
Why does this attempt to customize a type constraint error message fail?
以下构造创建了一个按预期运行的类型约束(在设置属性时检查 "Roles::Thing" 角色)当属性因未通过约束而被拒绝时,我希望自定义错误消息"Not a thing" 出现;但是仍然给出默认错误消息。我做错了什么?
role_type 'DoesThing', {
role => 'Roles::Thing',
message => sub { "Not a thing." }
};
更新:我在原文中没有提供足够的上下文 post。我尝试使用新类型的方式是:
has things => (
isa => 'ArrayRef[DoesThing]'
);
类型验证确实按预期工作;但是我仍然收到默认错误消息。我的自定义 "Not a thing" 错误消息没有像我预期的那样传播。
错误消息是您针对 ArrayRef
类型得到的消息,无论您在其中期望什么。
要获得自定义错误消息,您需要将 ArrayRef
合并到您的类型声明中:
subtype 'ArrayOfThings',
as 'ArrayRef[Roles::Thing]',
message { 'Not an array of things' };
以下构造创建了一个按预期运行的类型约束(在设置属性时检查 "Roles::Thing" 角色)当属性因未通过约束而被拒绝时,我希望自定义错误消息"Not a thing" 出现;但是仍然给出默认错误消息。我做错了什么?
role_type 'DoesThing', {
role => 'Roles::Thing',
message => sub { "Not a thing." }
};
更新:我在原文中没有提供足够的上下文 post。我尝试使用新类型的方式是:
has things => (
isa => 'ArrayRef[DoesThing]'
);
类型验证确实按预期工作;但是我仍然收到默认错误消息。我的自定义 "Not a thing" 错误消息没有像我预期的那样传播。
错误消息是您针对 ArrayRef
类型得到的消息,无论您在其中期望什么。
要获得自定义错误消息,您需要将 ArrayRef
合并到您的类型声明中:
subtype 'ArrayOfThings',
as 'ArrayRef[Roles::Thing]',
message { 'Not an array of things' };