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

Ruby 优先级如何应用于具有赋值和条件的表达式?,ruby,operator-precedence,Ruby,Operator Precedence,我有以下简单的片段: var = 1 if false 我预计这将评估为: (var = 1) if false 因此,var将是未定义的。但是,var被定义并接收一个nil作为其值 我在这里遗漏了什么?Ruby在解析过程中识别局部变量。因此,在您的例子中,即使它没有设置为1(因为这个表达式的优先级与您编写的一样),ruby也知道它是局部变量,并且不会引发NameError Ruby在解析过程中识别局部变量。因此,在您的例子中,即使它没有设置为1(因为这个表达式的优先级与您编写的一样),ru

我有以下简单的片段:

var = 1 if false
我预计这将评估为:

(var = 1) if false
因此,
var
将是未定义的。但是,
var
被定义并接收一个
nil
作为其值


我在这里遗漏了什么?

Ruby在解析过程中识别局部变量。因此,在您的例子中,即使它没有设置为
1
(因为这个表达式的优先级与您编写的一样),ruby也知道它是局部变量,并且不会引发
NameError

Ruby在解析过程中识别局部变量。因此,在您的例子中,即使它没有设置为
1
(因为这个表达式的优先级与您编写的一样),ruby也知道它是局部变量,并且不会引发
NameError

当Ruby解析器在表达式的左侧看到它时(即使它在不运行的条件中),它定义了
var
。因此
nil
看起来是一个合适的值。

Ruby解析器在表达式的左侧看到它时定义
var
(即使它在一个不运行的条件中)。因此
nil
看起来是一个合适的值