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

时间:2016-08-03 09:02:05

标签: ruby operator-precedence

我有以下简单的代码段:

var = 1 if false

我希望这可以评估为:

(var = 1) if false

所以var将是未定义的。但是,var已定义并收到nil作为其值。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

Ruby在解析过程中识别局部变量。所以,在你的情况下,即使你没有设置为1(因为这个表达式的优先级就像你写的那样),ruby知道它的局部变量而且没有提高NameError

答案 1 :(得分:1)

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