5

我对 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 中它首先忽略了错误aa我认为这是因为 ruby​​ 的执行路径由于条件而没有到达变量false。在案例 3 中进行赋值时也是如此。它为我提供了a定义但具有nil值的变量。有人可以解释它的工作原理吗?

4

1 回答 1

3

在解析时,如果 Ruby 发现任何这样的赋值a=2,那么此时会创建局部变量。是否放入任何false条件表达式都没有关系。undefined local variable or method a否则,如果您尝试使用诸如a此处的变量,则会引发合法错误,然后再使用assignment(=)操作员创建它。

看与谬误内的赋值操作混淆if

于 2013-07-23T09:32:36.500 回答