问题标签 [variable-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python:while循环中定义的函数引用旧变量
我有一个在 while 循环中定义的函数,该函数由我无法控制的代码调用。
在以下示例中,access() 始终返回值 1。为什么?以及如何使 access() 返回最新值?
lambda 似乎也是如此。我不能让 g 全球化。
raku - 我可以一次绑定多个变量吗?
以下行声明了一个变量并将其绑定到右侧的数字。
效果是$a
不是 a Scalar
,而是 a Int
,可以看出
我的问题是,我可以在一个声明中绑定多个变量吗?这不起作用:
因为,从使用 可以看出say $a.VAR.^name
,两者$a
现在$b
都是Scalar
s。(我想我理解为什么会发生这种情况,问题是是否有一种不同的方法可以在不创建s 的情况下同时绑定$a
和绑定$b
给定的s。)Int
Scalar
此外,在这种情况下使用:=
和之间有什么区别吗?=
scheme - Scheme语言中的词法与动态解释器
我仍然不明白动态解释器与词汇解释器有何不同。
我正在研究方案,我发现很难知道像这样的简单代码如何动态地和词法地工作。
任何指导?
immutability - 具有类型约束的无符号“变量”是否可以重新绑定?
[编辑:关闭支持https://stackoverflow.com/questions/69231506/what-are-the-rules-for-re-binding,这是我在更清楚地了解我在这个问题中要问的内容后制定的。 ]
我的理解来自禁止重新绑定无符号变量是否有目的或好处?是一个没有印记就宣布的符号永远不会被反弹。引用该答案:
是的,[当前行为] 肯定是设计使然,并且 - 就像 [Raku] 设计中的大多数事情一样 - 这样做的原因不止一个……决定使无符号符号形成“静态单一分配”语法…… . 造成这种情况的原因有很多,包括……通过让读者知道符号永远不会反弹到新值的形式来增强程序的可读性
(强调补充。)
鉴于此,我对下面的代码感到非常惊讶:
也就是说,当声明b
没有符号但有Int
类型约束时,它可以被反弹——不像它缺少类型约束时。这种行为是一个错误,还是正确的?
如果是,它如何符合上面链接的答案中提到的设计考虑?
(另请参阅GitHub 上的这个 Raku/doc 问题线程,以讨论这种行为以及它是否是故意的。)
immutability - 重新绑定的规则是什么?
[注意:我根据旧版本的 Rakudo 提出了这个问题。正如在接受的答案中所解释的,令人困惑的输出是 Rakudo 错误的结果,这些错误现已得到解决。我留下了下面 Q 的原始版本以供历史参考。]
Raku 有时会禁止重新绑定;以下两行
产生编译时错误:
然而,Raku 允许在很多很多情况下重新绑定——包括许多让我大吃一惊的情况。以下所有成功重新绑定;每个say
输出not-foo
。
因此,如果满足以下任一条件,目前似乎允许对任何名称重新绑定,无论是否有印记:
- 该名称具有任何显式类型约束(包括由或sigils
Any
施加的类型约束),或@
%
- 重新绑定使用限定名称。
这种重新绑定当前发生在声明的变量和参数上,并且包括不是rw
或的参数copy
。正如最后一个示例所示,它甚至允许以(似乎?)违反词法范围的方式重新绑定。(该示例基于带有注释的 Roast 测试-- legal?
,这表明我可能至少不是唯一一个发现这种行为令人惊讶的人!虽然测试重新绑定了一个is dynamic
变量——在某些方面,上面的行为甚至更多奇怪)。
据我所知,唯一不能使用其中一种方法重新绑定的名称是那些声明为constant
.
所以四个问题:
- 我是否正确描述了当前的行为?[编辑:也就是说,我上面列出的两条规则是否正确描述了当前行为,或者正确的描述是否需要其他/附加规则?]
- 这种行为是否正确/有意/符合规范?(尽管存在S03-binding,但我发现重新绑定的情况非常少)。
- 如果这种行为不是故意的,那么重新绑定的规则应该是什么?
- 有什么方法可以告诉 Raku“不要将这个名字重新绑定到一个新的值,不是真的,我的意思是它”?
(这个问题取代了我之前的问题,在我意识到重新绑定名称是多么容易之前,我问过这个问题;我正在关闭它以支持这个问题。另一个相关问题:禁止无符号变量是否有目的或好处rebinding?,它讨论了一些设计权衡,假设无符号变量不能被重新绑定,这与上面的几个示例相反。)