在试图更好地理解无格变量以及它们与$sigiled变量的区别时,我发现,与$sigiled变量不同,sigilless变量在初始化后无法反弹:
my $a = 42;
my $b := $a;
$b := 42; # No exception generated
my \c := $a;
c := 42; # OUTPUT: «Cannot use bind operator with this left-hand side?»
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?如果是这样,当$不禁止这些变量被禁止时,是否有目的或好处禁止无重复变量重新绑定?
[注意:我根据旧版本的 Rakudo 问这个问题。正如已接受的答案中所解释的,令人困惑的输出是 Rakudo bug 的结果,现已解决。我留下了下面 Q 的原始版本以供历史参考。]
\nRaku 有时会禁止重新绑定;以下两行
\nsub f($a) { $a := 42 }\nmy \\var = \'foo\'; var := \'not-foo\';\nRun Code Online (Sandbox Code Playgroud)\n产生编译时错误:
\n===SORRY!=== Error while compiling \nCannot use bind operator with this left-hand side\nRun Code Online (Sandbox Code Playgroud)\n然而,Raku 允许在很多很多情况下重新绑定 \xe2\x80\x93 ,包括许多让我大吃一惊的情况。以下所有内容都成功重新绑定;每个say输出not-foo。
sub f($a) { $a := 42 }\nmy \\var = \'foo\'; var := \'not-foo\';\nRun Code Online (Sandbox Code Playgroud)\n因此,目前看来,只要满足以下任一条件,任何名称都可以重新绑定,无论是否有印记:
\nAny施加的类型约束),或者@%