结 ~~ 结行为
Junction ~~ Junction behavior
我想检查一个数组的所有元素是否都给定了类型。
$ raku -e 'my @t = 1,2,3; say all(@t) ~~ Int'
True
$ raku -e 'my @t = 1,2,3,"a"; say all(@t) ~~ Int'
False
到目前为止工作正常。现在我想允许两种类型:
$ raku -e 'my @t = 1,2,3,"a"; say all(@t) ~~ Int|Str'
False
为什么会这样?如果 1 ~~ Int|Str
对于单个元素是 True
为什么它对于 all()
元素连接失败?
顺便说一句:这个问题是关于理解 Junction ~~ Junction
行为(这也有点未记录),而不是关于从示例中执行检查的替代方法(我知道这是可能的)。
一些额外的行可能有助于阐明正在发生的事情:
say all(1, 2, 3) ~~ Int|Str; # OUTPUT: «True»
say all('a', 'b', 'c') ~~ Int|Str; # OUTPUT: «True»
say all(1, 2, 'c') ~~ Int|Str; # OUTPUT: «False»
也就是说,all(1, 2, 'c') ~~ Int|Str
是在问“是否所有 1, 2, 'c'
都是 Int
,或者,是否所有 1, 2, 'c'
] 是 Str
吗?”由于两者都不是这种情况,因此 returns False
.
我想检查一个数组的所有元素是否都给定了类型。
$ raku -e 'my @t = 1,2,3; say all(@t) ~~ Int'
True
$ raku -e 'my @t = 1,2,3,"a"; say all(@t) ~~ Int'
False
到目前为止工作正常。现在我想允许两种类型:
$ raku -e 'my @t = 1,2,3,"a"; say all(@t) ~~ Int|Str'
False
为什么会这样?如果 1 ~~ Int|Str
对于单个元素是 True
为什么它对于 all()
元素连接失败?
顺便说一句:这个问题是关于理解 Junction ~~ Junction
行为(这也有点未记录),而不是关于从示例中执行检查的替代方法(我知道这是可能的)。
一些额外的行可能有助于阐明正在发生的事情:
say all(1, 2, 3) ~~ Int|Str; # OUTPUT: «True»
say all('a', 'b', 'c') ~~ Int|Str; # OUTPUT: «True»
say all(1, 2, 'c') ~~ Int|Str; # OUTPUT: «False»
也就是说,all(1, 2, 'c') ~~ Int|Str
是在问“是否所有 1, 2, 'c'
都是 Int
,或者,是否所有 1, 2, 'c'
] 是 Str
吗?”由于两者都不是这种情况,因此 returns False
.