#局部变量与块变量的区别#块内部的命名空间和与块外部是共享的在块外部定义的局部变量在块中也可以继续使用#块变量与块外部的变量同名 Ruby会认为他们是两个变量x, y = 1, 1 #初始化局部变量x yary = [1, 2, 3]ary.each do |x| #将x做为块变量使用 y = x #将块变量x的值赋给局部变量yendp [x, y] #输出1和3 因为x的值没有发生改变,刚才改变的是块变量x
#当把y注释掉则会报错 NameError#说明在块内部定义的变量不能被外部访问#所以在块内部给局部变量赋值的时候一定要当心#块变量只能在块内部使用,不能覆盖外部的局部变量x = 1 #初始化局部变量x y# y = 1ary = [1, 2, 3]ary.each do |x| #将x做为块变量使用 y = x #将块变量x的值赋给局部变量yendp [x, y] #输出1和3 因为x的值没有发生改变,刚才改变的是块变量x
#但是Ruby提供了在块内定义局部变量的方法x, y, z = 0, 0, 0ary = [1, 2, 3]ary.each do |x; y| #定义块变量x 块局部变量y y = x #对块局部变量y赋值 z = x #对局部变量z赋值 p [x, y, z]endp [x, y, z] #输出[0,0,3]#x输出0同理,y输出零是因为在块中输出的y是块局部变量#所以实际上局部变量y的值没有改变
总结
1 在块外部定义的局部变量在块内部是可以使用的。但是在块内部定义的变量不能被外部访问。
2 当块变量的名字与局部变量的名字相同时Ruby会认为他们是不同的变量,块变量只能在块内部使用不能覆盖外部的局部变量。
3 Ruby提供了块变量以外的块局部变量。