相同名称的局部变量如果分别是在不同的上下文中定义的,那么它们的本身也就是不同的变量,指向不同的值,这就是作用域的区别~
比较特殊的情况就是线程的局部变量,如果一个局部变量是在线程中首次赋值定义的,那么它的作用域就在这个线程中,并且独立于外部的局部变量;如果同名的局部变量在线程外就已经被赋值过了,那么线程将会继承这个外部的局部变量,换句话说就是这个局部变量仍然是外部的那个变量,而不是局部于线程的变量
至于你说的 for ... end、while ... end 和 if ... else ... end,这个是可以被包含在 def ... end 等上述的五种代码块中的,并且即便它是在这些控制块里首次赋值定义的局部变量,其作用域还是外层的上述五种代码块之一,比如:
def fn
while true
if true
for i in 0..0
begin
a = 99
end
end
end
break
end
p a # => 99
end
fn
复制代码
a 在所有控制语句的外部仍然是可见的,这一点和其它很多语言就不一样了作者: 额滴神啊 时间: 2009-10-21 12:24
哇!好详细,谢谢紫苏了~
细心研究去了~~