代码之家  ›  专栏  ›  技术社区  ›  raldi

所有不同的Perl 6相等运算符的处理方式是什么?(==,==,eq,eqv,~~,=:=,…)

  •  38
  • raldi  · 技术社区  · 16 年前

    Perl 6似乎有大量的相等运算符。是什么 =:= ? 两者之间有什么区别 leg cmp ? 或 eqv ===

    4 回复  |  直到 5 年前
        1
  •  44
  •   moritz    9 年前

    =:=

    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] 将为false(不是相同的数组),但 [1, 2, 3] eqv [1, 2, 3] 将是正确的(相同的结构)。

    leg 比较类似Perl 5的字符串 cmp ,而Perl 6 更聪明,会比较数字,比如 <=> 和字符串一样 .

    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 是一种类型,它是类型检查。如果 是正则表达式,它是正则表达式匹配-等等。

        2
  •  19
  •   raiph    10 年前

    这个摘要是什么意思 Synopsis 3: Comparison semantics 做你想做的,或者你已经读过了?设计文档链接到使用这些特性的测试文件,因此您可以看到它们的使用示例及其当前测试状态。

    Perl 6的比较运算符更适合于动态语言和所有正在进行的事情。不再只是比较字符串或数字(或将事物转换为字符串或数字),现在您可以使用执行所需操作的运算符精确地测试事物。您可以测试值、容器、类型等。

    在其中一条评论中,您询问了 eqv cmp . 在旧的Perl 5时代, 化学机械抛光 化学机械抛光 返回三种类型的 Order 对象,因此您不必记住-1、0或1的含义。还有,新的 不强制使用字符串语义,因此在传递数字时它会更智能(不像Perl5那样排序为1、10、11、2、20、21…)。

    这个 leg ( L 比, E G 化学机械抛光 ~$a cmp ~$b 哪里 ~ 是强制使用字符串语义的新“字符串上下文化器”。具有 ,您总是在进行字符串比较,就像旧的Perl5一样 .

    如果您对其他运算符仍有疑问,让我们将其分解为单独的问题。:)

        3
  •  3
  •   Ether    14 年前

    这也是一个方便的参考指南:

    Perl6 Periodic Table of Operators