Raku Perl 6'^=';运营商没有';不会产生结果,导致程序永远不会终止

Raku Perl 6'^=';运营商没有';不会产生结果,导致程序永远不会终止,raku,Raku,使用^=运算符时,程序不会终止,也不会产生结果。我做错什么了吗 为了检查我是否可以复制这个,我使用了这个工作的、可验证的示例: my $k = 1; $k ^= 24; say $k; 除此之外,我还尝试过这样做:$k=$k^24-但这仍然会产生相同的问题。正如@melpomene所建议的,我应该使用整数位异或运算符 使用=语法的可读性解决方案是: my $k = 1; $k +^= 24; say $k 与大多数其他语言不同,普通中缀^运算符用于其他语言。其中包含^的运算符包括: 进行整

使用
^=
运算符时,程序不会终止,也不会产生结果。我做错什么了吗

为了检查我是否可以复制这个,我使用了这个工作的、可验证的示例:

my $k = 1;
$k ^= 24;
say $k;

除此之外,我还尝试过这样做:
$k=$k^24-但这仍然会产生相同的问题。

正如@melpomene所建议的,我应该使用整数位异或运算符

使用
=
语法的可读性解决方案是:

my $k = 1;
$k +^= 24;
say $k
与大多数其他语言不同,普通中缀
^
运算符用于其他语言。其中包含
^
的运算符包括:

  • 进行整数位反运算

  • 是否存在短路布尔异或

  • 是一个范围构造函数

  • 是一个“一”连接构造函数(这就是我问题中的代码所调用的)


有几个中缀操作符,其中包含
^
,它们都以某种形式表示独占或

  • ^
    连接异或,如果恰好有一个值是真值,则该异或为真值。这是一个可以传递的值

    so1==1^2;#真的
    so2==1^2;#真的
    所以42==1^2;#假的
    所以1^2==1^2;#假的
    我的$v=1^2;
    所以1==v;#真的
    
    我添加了
    so
    以折叠交叉点,您应该尽快执行此操作

  • 短路异或。返回唯一的真实值。如果没有truish值,则返回最后一个值。如果存在多个trueish值,则短路并返回
    Nil

    say(0^^42^^Nil);
    42
    说(!说(1)^^^!说(2)^^-1但不正确);
    1.
    2.
    -1
    说(说(1)^^说(2)^说(3));
    1.
    2.
    无
    
  • +^
    Int位异或。它比较两个整数的位,如果正好有一个整数在该位置有一个
    1
    ,则返回的值有一个
    1

    说(0b10101010+^0b10100000)。基数:2;#1010
    说1.5+^2;#3.
    
  • ~^
    字符串按位异或。除字符串外,执行与
    +^
    相同的操作

    说“aa”~^“US”#42
    
Perl 5对
+^
~^
都使用了
^
,具体取决于给定的值。如果您选择使用较新的版本,则会为这些版本提供单独的运算符


代码没有停止的原因是使用
^
创建的连接跟踪值的来源

my$k=1;
my$v=$k^24;
比如说$v;#一(1,24);
$k=2;
比如说$v;#一(2,24);

因此,
$k^=24
创建一个自参考值。这很好,直到你尝试使用或打印它。

你预期会发生什么?@melpomene对
$k
执行二进制异或,这是我所能知道的。似乎与此有关。