gpt4 book ai didi

perl - "isn' t 数字 "error in "排序 "after "uniq"

转载 作者:行者123 更新时间:2023-12-04 04:09:06 27 4
gpt4 key购买 nike

use List::MoreUtils 'uniq';
print join ", ", sort uniq ("b", "a", "a");

结果参数“a”在排序中不是数字...
print join ", ", uniq sort ("b", "a", "a");

按预期工作。
print join ", ", sort {$a cmp $b} uniq ("b", "a", "a");

也可以——但第一个例子有什么问题?

最佳答案

该代码属于 sort调用

sort SUBNAME LIST

...
If SUBNAME is specified, it gives the name of a subroutine that returns an integer less than, equal to, or greater than 0 , depending on how the elements of the list are to be ordered.


uniq在第一个示例中被视为指定用于排序的子名称和 qw(b a a) 的裸字。是要排序的列表 -- 你不是 uniq -ing 列表(可以这么说)但正在使用 uniq作为该列表的排序功能。

错误消息来自排序函数需要返回一个数字和 uniq返回字符串。

您已经发现了一种使其工作的方法,也可以使用一元 +
say for sort +uniq(@ary);    # or: say for sort + uniq @ary;

因为接下来 +被视为表达式,所以 sort获取评估列表。见 this postthis post讨论一元的这种用法 + .

或者通过和通过使用parens
say for sort (uniq(@ary));

这里也需要内部对,因为 sort (uniq @ary) uniq在该列表中被解释为一个裸词,因此不合适。请注意 sort (uniq (@ary))行不通,因为多余的括号无关紧要,而且我们再次有了一个裸词;所以这里的空间很重要!

这种技巧是由于 sort的灵活(模糊)接口(interface),采用 LIST可选地前面有一个裸词,它需要是一个子名称。它最终依靠口译员来解决其中的一些问题,然后我们必须精确。

关于perl - "isn' t 数字 "error in "排序 "after "uniq",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com