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