我有以下简单的代码段:
var = 1 if false
我希望这可以评估为:
(var = 1) if false
所以var
将是未定义的。但是,var
已定义并收到nil
作为其值。
我在这里缺少什么?
答案 0 :(得分:1)
Ruby在解析过程中识别局部变量。所以,在你的情况下,即使你没有设置为1
(因为这个表达式的优先级就像你写的那样),ruby知道它的局部变量而且没有提高NameError
。
答案 1 :(得分:1)
Ruby解析器在表达式的左侧看到它时定义var
(即使它在不运行的条件内部)。所以nil
看起来是合适的价值。