首页 > 解决方案 > Perl 6 将 split 函数的输出解释为整数列表/数组

问题描述

say "1 10".split(" ") 

返回(1,10)

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

say [...] "1 10".split(" ")

(1)在它应该返回的时候返回我(1 2 3 4 5 6 7 8 9 10)猜这是因为 split 函数的输出被解释为字符串。

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

标签: raku

解决方案


如果您想要数字行为,请强制转换为数字:

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

这使用<<超运算将数字强制(前缀+)应用于由split.


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


你写的相当于:

put gist "1"..."10";

say相当于put gist。)

一个gist是。"1"..."10"_(1)

那是因为gistofList.new("1")就像of(1)一样。gistList.new("a")(a)

"1"..."10"评估为List.new("1").

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

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

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

出色地:

say "1" cmp "10"; # Less

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

接着:

say "1".succ;     # 2

和:

say "2" cmp "10"; # More

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


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


推荐阅读