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
执行二进制异或,这是我所能知道的。似乎与此有关。