【发布时间】:2021-12-06 08:02:45
【问题描述】:
今天我遇到了一段有趣的代码。这更像是一个关于 ruby 解析器的科学问题。
我们知道 ruby 中的一切都是一个对象,每个表达式的计算结果至少为 nil。
但是下面的“赋值”是如何解析的:
somevar
NameError: undefined local variable or method 'somevar' for main:Object
somevar = "test" if false
=> nil
somevar
=> nil
在赋值中使用之前,您会看到该变量是未定义的。但是由于这种情况,分配没有发生。还是因为条件评估为零而发生?我尝试了一些在这种情况下会损坏的东西,但它确实有效:
a = {}
a[1/0]
ZeroDivisionError: divided by 0
a[1/0] = "test" if false
=> nil
那么这是否意味着按原样工作?或者在访问之前测试变量(defined?(somevar))是否有意义,以防未来版本的 ruby 会破坏这种行为?例如,将分配的指针保存到该变量。
我目前使用的 ruby 版本是 3.0.2。
【问题讨论】:
标签: ruby undefined variable-assignment