在这个例子中,
def foo(x)
if(x > 5)
bar = 100
end
puts bar
end
然后foo(6)输出:100
但是如果我把定义改成
def foo(x)
if(x > 5)
bar = 100
end
puts bob
end
我得到一个"未定义的局部变量或方法"错误.
所以我的问题是,当我调用foo(3)时,为什么没有得到这个错误,而bar从未设置?
在这个例子中,
def foo(x)
if(x > 5)
bar = 100
end
puts bar
end
然后foo(6)输出:100
但是如果我把定义改成
def foo(x)
if(x > 5)
bar = 100
end
puts bob
end
我得到一个"未定义的局部变量或方法"错误.
所以我的问题是,当我调用foo(3)时,为什么没有得到这个错误,而bar从未设置?
这里发生了几件事.首先,在if
块内声明的变量与在方法顶层声明的变量具有相同的局部作用域,这就是为什么bar
在if
块外可用.第二,你得到这个错误是因为bob
被直接引用了.Ruby解释器以前从未见过它,也从未见过它被初始化.然而,它之前在if语句中看到了bar
初始化.所以当它到达wine 吧时,它知道它的存在.把这两者结合起来,这就是你的答案.