[EDIT:关闭以支持https://stackoverflow.com/questions/69231506/what-are-the-rules-for-re-binding,这是我在更清楚地理解我在这个问题中想问的内容后制定的。]
我的理解来自禁止无符号变量重新绑定是否有目的或好处? https://stackoverflow.com/questions/50399784/is-there-a-purpose-or-benefit-in-prohibiting-sigilless-variables-from-rebinding/50401989#50401989是一个没有印记的符号可以never会反弹。引用那个答案:
是的,[当前的行为]当然是设计使然,而且 - 就像 [Raku] 设计中的大多数东西一样 - 这样做的原因不止一个......我们决定使无印记符号形成一种“静态单一赋值”语法...... 。造成这种情况的原因有很多,包括……通过增加程序的可读性来增强程序的可读性。让读者知道符号永远不会反弹到新值的形式
(强调已添加。)
鉴于此,我非常惊讶地看到下面的代码:
my Int \b = 8;
say "{b*b}"; # OUTPUT: «64»
b := 4;
say "{b*b}"; # OUTPUT: «16»
也就是说,当b
声明时没有印记,但是with an Int
类型约束,它可以反弹——与缺乏类型约束时不同。这种行为是错误还是正确的?
如果是,它如何符合上面链接的答案中提到的设计考虑因素?
(也可以看看这个 Raku/doc 问题线程 https://github.com/Raku/doc/issues/3950#issuecomment-912726932在 GitHub 上讨论此行为及其是否是故意的。)
这是一个错误。
[任何语言都不应该有时禁止无符号变量重新绑定,具体取决于声明中是否指定了类型或类型]。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)