ruby如何跟踪变量

时间:2013-07-23 09:30:07

标签: ruby

我对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。有人可以解释它的工作方式吗?

1 个答案:

答案 0 :(得分:3)

在解析时,如果Ruby发现任何赋值a=2,那么就会在那一刻创建局部变量。如果你放入任何false条件表达式内部并不重要。否则,如果您在使用undefined local variable or method a运算符创建之前尝试使用a这样的变量,则会将assignment(=)抛出合法错误。

Confusion with the assignment operation inside the fallacy if block