为什么单个数字无法匹配数组中的 Range 对象?

che*_*nyf 6 raku

> my @numbers = 1, 3, 5;
> 1 ~~ /@numbers/; # 
?1?
Run Code Online (Sandbox Code Playgroud)

是相同的:

> 1 ~~ /1 | 3 | 5/
?1?
Run Code Online (Sandbox Code Playgroud)

但是当元素是Range对象时,它无法匹配:

> my @ranges = 1..3.item, 4..6.item;
[1..3 4..6]

> 1 ~~ /@ranges/
Nil
> 1 ~~ /|@ranges/
Nil
> 1 ~~ /||@ranges/
Run Code Online (Sandbox Code Playgroud)

rai*_*iph 2

\n

为什么单个数字无法匹配数组中的 Range 对象?

\n
\n\n

根据文档

\n\n
\n

[数组]各个元素的插值规则与标量相同

\n
\n\n

根据同一文档部分,标量(不是正则表达式)的规则是:

\n\n
\n

插入字符串化值

\n
\n\n

范围对象,例如1..3字符串化为1 2 3

\n\n
my $range = 1..3;\nput $range;                   # 1 2 3\nput so \'1\'     ~~ / $range /; # False\nput so \'1 2 3\' ~~ / $range /; # True\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,正如霍利建议的那样,也许可以:

\n\n
my @ranges = flat 1..3, 4..6;\nsay @ranges;        # [1 2 3 4 5 6]\nsay 1 ~~ /@ranges/; # \xef\xbd\xa21\xef\xbd\xa3\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者有什么原因你不想要这样吗?(另请参阅西蒙对霍利的回答的评论。)

\n