Perl 6将split函数的输出解释为整数列表/数组

Rom*_*rio 7 perl6 raku

say "1 10".split(" ") 
Run Code Online (Sandbox Code Playgroud)

退货 (1,10)

当我使用这些110作为序列运算符的参数时[...]

say [...] "1 10".split(" ")
Run Code Online (Sandbox Code Playgroud)

返回,(1)而应该返回,(1 2 3 4 5 6 7 8 9 10)我想是因为split函数的输出被解释为字符串。

如何解决这个问题?谢谢。

rai*_*iph 7

如果您想要数字行为,则强制使用数字:

say [...] +<< "1 10".split(" "); # (1 2 3 4 5 6 7 8 9 10)
Run Code Online (Sandbox Code Playgroud)

这使用<<hyperop将数字强制(prefix +)应用于生成的序列的每个元素split


关于带有字符串端点的序列和范围行为:


您写的内容等同于:

put gist "1"..."10";
Run Code Online (Sandbox Code Playgroud)

say等于put gist。)

gist"1"..."10"(1)

这是因为gistList.new("1")(1)一样的gistList.new("a")(a)

"1"..."10"计算为List.new("1")

为什么?我不确定,但我正在探索可用的信息。

让我们从文档开始。中...操作文档说:

默认生成器为*.succ*.pred,具体取决于端点的比较方式

好:

say "1" cmp "10"; # Less
Run Code Online (Sandbox Code Playgroud)

这大概意味着序列开始调用*.succ

然后:

say "1".succ;     # 2
Run Code Online (Sandbox Code Playgroud)

和:

say "2" cmp "10"; # More
Run Code Online (Sandbox Code Playgroud)

看来这导致序列立即在“ 1”之后终止,而不是包括“ 2”并继续。


我将继续搜索错误队列,并检查@ wamba ++在其对以上链接的SO的答案中链接的区域周围的代码:“为什么Perl 6序列'A' … 'AA'只有一个元素?”。