优先级如何应用于具有赋值和条件的表达式?

How does precedence apply on an expression with an assignment and a conditional?

我有以下简单片段:

var = 1 if false

我希望它的计算结果为:

(var = 1) if false

所以 var 将是未定义的。然而,var 被定义并接收一个 nil 作为它的值。

我在这里错过了什么?

Ruby 在解析时识别局部变量。所以,在你的情况下,即使它没有设置为 1 (因为这个表达式的优先级就像你写的那样),ruby 知道它是局部变量并且不会引发 NameError .

Ruby 解析器定义 var 当它在表达式的左侧看到它时(即使它在没有 运行 的条件内部)。所以 nil 看起来是一个合适的值。