我对Ruby跟踪变量的方式感到困惑。例如:
案例1:
if true
a
end
会给您一个错误undefined local variable or method a
。
案例2:
if false
a
end
a
会为第二个a
提供相同的错误,而不是第一个a
。
案例3:
if false
a=2
end
a #=> nil
defined? a #=> 'local-variable'
如果比较案例2和案例3,在案例2中它首先忽略了错误a
。我认为由于条件的a
,因为ruby的执行路径没有达到变量false
。在我使用案例3中的赋值时也是如此。它为我提供了变量a
已定义但值nil
。有人可以解释它的工作方式吗?
答案 0 :(得分:3)
在解析时,如果Ruby发现任何赋值a=2
,那么就会在那一刻创建局部变量。如果你放入任何false
条件表达式内部并不重要。否则,如果您在使用undefined local variable or method a
运算符创建之前尝试使用a
这样的变量,则会将assignment(=)
抛出合法错误。
看Confusion with the assignment operation inside the fallacy if
block