如何命名约束
How to name a constraint
我有一个接受 slurpy 数组的函数,我想将数组的内容限制为 0 到 255 之间的 Int。所以使用 raku 的好文档,我发现我可以写:
my &simp = -> *@a where { 0 <= $_.all <= 255 } { @a <<+>> 10 }
say &simp( 2, 3, 4);
# returns: [12 13 14]
根据需要,如果我提供的列表不在范围内,那么我会得到正确的错误,即
say &simp( 2,3,400 );
# Constraint type check failed in binding to parameter '@a'; expected anonymous constraint to be met but got Array ($[2, 3, 400])
是否可以以某种方式命名约束,以便错误消息可以提供更好的响应?
如果要用多个子编码,则将提供一个带有错误消息的默认子。但是对于内联尖头 ??
你要的是subset.
subset ByteSizedInt of Int where { 0 <= $_ <= 255 };
my &simp = -> ByteSizedInt *@a { @a <<+>> 10 };
您可以尝试使用 || 运算符在 where 子句中生成错误。
my &simp = -> *@a where { (0 <= $_.all <= 255) || die 'not in Range' } { @a <<+>> 10 }
say &simp( 2, 3, 4);
# returns: [12 13 14]
say &simp( 2,3,400 );
#not in Range
我有一个接受 slurpy 数组的函数,我想将数组的内容限制为 0 到 255 之间的 Int。所以使用 raku 的好文档,我发现我可以写:
my &simp = -> *@a where { 0 <= $_.all <= 255 } { @a <<+>> 10 }
say &simp( 2, 3, 4);
# returns: [12 13 14]
根据需要,如果我提供的列表不在范围内,那么我会得到正确的错误,即
say &simp( 2,3,400 );
# Constraint type check failed in binding to parameter '@a'; expected anonymous constraint to be met but got Array ($[2, 3, 400])
是否可以以某种方式命名约束,以便错误消息可以提供更好的响应?
如果要用多个子编码,则将提供一个带有错误消息的默认子。但是对于内联尖头 ??
你要的是subset.
subset ByteSizedInt of Int where { 0 <= $_ <= 255 };
my &simp = -> ByteSizedInt *@a { @a <<+>> 10 };
您可以尝试使用 || 运算符在 where 子句中生成错误。
my &simp = -> *@a where { (0 <= $_.all <= 255) || die 'not in Range' } { @a <<+>> 10 }
say &simp( 2, 3, 4);
# returns: [12 13 14]
say &simp( 2,3,400 );
#not in Range