当前位置:  开发笔记 > 编程语言 > 正文

与所有不同的Perl 6相等运算符有什么关系?(==,===,eq,eqv,~~,=:=,...)

如何解决《与所有不同的Perl6相等运算符有什么关系?(==,===,eq,eqv,~~,=:=,)》经验,为你挑选了3个好方法。

Perl 6似乎爆发了相等的运算符.什么是=:=leg和之间有什么区别cmp?还是eqv===

有没有人有一个很好的总结?



1> moritz..:

=:=测试两个容器(变量或数组或散列项)是否有别名,即如果有变化,另一个容器也会变化吗?

my $x;
my @a = 1, 2, 3;
# $x =:= @a[0] is false
$x := @a[0];
# now $x == 1, and $x =:= @a[0] is true
$x = 4;
# now @a is 4, 2, 3 

至于其他:===测试两个引用是否指向同一个对象,而eqv测试两个结构是否在结构上是等价的.所以[1, 2, 3] === [1, 2, 3]将是假的(不是相同的数组),但[1, 2, 3] eqv [1, 2, 3]将是真的(相同的结构).

leg比较像Perl 5这样的字符串cmp,而Perl 6 cmp更聪明,它会比较数字<=>和字符串之类的leg.

13 leg 4   # -1, because 1 is smaller than 4, and leg converts to string
13 cmp 4   # +1, because both are numbers, so use numeric comparison.

最后~~是"智能匹配",它回答了"确实$x匹配$y" 的问题.如果$y是类型,则是类型检查.如果$y是正则表达式,它是正则表达式匹配 - 依此类推.



2> Randy..:

来自reddit今天:

Perl相等运算符的比较



3> brian d foy..:

概要3:比较语义中的摘要是否符合您的要求,或者您是否已经阅读过它?设计文档链接到使用这些功能的测试文件,因此您可以查看其使用示例及其当前测试状态.

Perl 6的比较运算符更适合动态语言和所有正在发生的事情.现在,您可以使用符合您需要的操作员精确测试事物,而不仅仅是比较字符串或数字(或将事物转换成字符串或数字).您可以测试值,容器,类型等.

在其中一条评论中,您会询问eqvcmp.在Perl 5的旧时代,cmp是否存在排序并返回三个魔术值(-1,0,1)中的一个,并且它始终使用字符串语义.在Perl 6中,cmp返回三种类型的Order对象之一,因此您不必记住-1,0或1的含义.此外,新的cmp不会强制字符串语义,所以它在传递数字时更聪明(不像Perl 5那样排序为1,10,11,2,20,21 ......).

leg( ESS比,ê QUAL, reater比)是cmp与串的语义.它被定义为Perl 6 ~$a cmp ~$b,其中~新的"字符串语境化器"强制字符串语义.有了leg,你总是在进行字符串比较,就像旧的Perl 5一样cmp.

如果您对其他运营商仍有疑问,请将其分解为单独的问题.:)

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有