具有类型约束的无符号“变量”是否可以重新绑定?

cod*_*ons 5 immutability rakudo variable-binding raku

[编辑:关闭支持/sf/ask/4846205451/,这是我在更清楚地理解我在这个问题中想问的内容后制定的。 ]

\n

我的理解是禁止无符号变量重新绑定有目的或好处吗?是一个没有印记的符号永远不可能无法反弹。引用那个答案:

\n
\n

是的,[当前的行为]肯定是设计使然,而且 - 就像 [Raku] 设计中的大多数东西一样 - 这样做的原因不止一个。\xe2\x80\xa6 决定采用无符号符号形式“静态单一赋值”语法\xe2\x80\xa6。造成这种情况的原因有多种,包括\xe2\x80\xa6 通过让读者知道符号永远不会反弹到新值的形式来增强程序可读性

\n
\n

(强调已添加。)

\n

鉴于此,我非常惊讶地看到下面的代码:

\n
my Int \\b = 8;\nsay "{b*b}"; # OUTPUT: \xc2\xab64\xc2\xbb\n\nb := 4;\nsay "{b*b}"; # OUTPUT: \xc2\xab16\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n

也就是说,当b声明时没有印记但具有类型Int约束时,它可以反弹 \xe2\x80\x93 ,这与缺乏该类型约束时不同。这种行为是错误还是正确的?

\n

如果是,它如何符合上面链接的答案中提到的设计考虑因素?

\n

(另请参阅GitHub 上的Raku/doc 问题线程,了解此行为及其是否是有意为之的讨论。)

\n

p6s*_*eve 4

这是一个错误。

[任何语言有时都不应该根据声明中是否指定了类型或哪种类型来禁止无符号变量重新绑定]。