gpt4 book ai didi

operators - Perl6 : comparison operator ~~

转载 作者:行者123 更新时间:2023-12-03 21:36:06 28 4
gpt4 key购买 nike

我不明白这种行为:

> sort([1,2,3,4]) ~~ sort([1,2,3,4])
False

你能给我解释一下吗?
为什么这两个列表(显然是相等的)根据 Perl 6 不相等。

更新

有趣,但这取决于 Perl6 版本(我刚刚注意到):
$ which perl6
/usr/bin/perl6
$ dpkg -S `which perl6`
rakudo: /usr/bin/perl6
$ perl6 --version
This is perl6 version 2015.11 built on MoarVM version 2015.11
$ perl6
> sort([1,2,3]) ~~ sort([1,2,3])
True
>
$ export PATH=~/.rakudobrew/bin:$PATH
$ perl6 --version
This is Rakudo version 2017.12 built on MoarVM version 2017.12.1
implementing Perl 6.c.
$ perl6
To exit type 'exit' or '^D'
> sort([1,2,3]) ~~ sort([1,2,3])
False
>

来自关于 #perl6 的讨论:
[19:35] <+committable6> AlexDaniel, 
¦2015.12,2016.01.1,2016.02,2016.03,2016.04,2016.05,2016.06,2016.07.1,2016.08.1,2016.09,2016.10,2016.11,2016.12: «True␤»
¦2017.01,2017.02,2017.03,2017.04.3,2017.05,2017.06,2017.07,2017.08,2017.09,2017.10,2017.11,2017.12,2018.01,HEAD(8afd791): «False␤»

返回 True(第 1 行)和 False(第 2 行)的版本。

最佳答案

关键观察是sort实际上并不返回列表:

> sort([1,2,3,4]).^name
Seq

documentation for sort似乎已经过时了:(。我会尽快解决这个问题。

所以,一个 Seq是一个序列,基本上是一个迭代器,您也可以尝试像列表一样使用它。

但是,在默认模式下,当您迭代 Seq 时,它不存储旧元素,主要是为了启用类似的代码
for $filehandle.lines -> $line {
# do something with $line here
}

不泄漏内存。 (这与 python 的迭代器相当。)

所以,这可能就是为什么没有人实现 Seq.ACCEPTS (智能匹配运算符 ~~ 在正确的参数上调用 ACCEPTS)在这种情况下表现得如您所愿,因为这可能是一种破坏性操作。所以默认 ACCEPTS行为开始,进行身份比较,并返回 False .

如果您将代码更改为
> sort([1,2,3,4]) ~~ sort([1,2,3,4]).list
True

它以您希望的方式运行。

如果 Seq.ACCEPTS,我将与其他 Perl 6 开发人员讨论可以改变行为更明智。

关于operators - Perl6 : comparison operator ~~,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488381/

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