我想检查数组的所有元素是否都给定了类型。
$ 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
Run Code Online (Sandbox Code Playgroud)
到目前为止按预期工作。现在我想允许两种类型:
$ raku -e 'my @t = 1,2,3,"a"; say all(@t) ~~ Int|Str'
False
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如果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»
Run Code Online (Sandbox Code Playgroud)
也就是说,all(1, 2, 'c') ~~ Int|Str是在问“是所有的1, 2, 'c'都是Ints 的情况,还是所有的1, 2, 'c'都是Strs 的情况?” 由于这两种情况都不是,它返回False。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |