我对Ruby跟踪变量的方式感到困惑.例如:
情况1:
if true
a
end
Run Code Online (Sandbox Code Playgroud)
会给你一个错误的说法undefined local variable or method a.
案例2:
if false
a
end
a
Run Code Online (Sandbox Code Playgroud)
会给你第二个错误a,而不是第一个a.
案例3:
if false
a=2
end
a #=> nil
defined? a #=> 'local-variable'
Run Code Online (Sandbox Code Playgroud)
如果比较案例2和案例3,则在案例2中它首先忽略错误a.我认为它因为ruby的执行路径而没有a因false条件而到达变量.当我在案例3中进行赋值时,它也是一样的.它给了我变量a定义但nil有价值.有人可以解释它的工作方式吗?
在解析时,如果 Ruby 发现任何这样的赋值a=2,则此时会创建局部变量。是否放入任何false条件表达式内部并不重要。否则,如果您在使用运算符创建变量之前undefined local variable or method a尝试使用此处的变量,则会抛出合法错误。aassignment(=)
看看谬误块内赋值操作的混淆if
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |