#局部變量與塊變量的區別 #塊內部的命名空間和與塊外部是共享的在塊外部定義的局部變量在塊中也能夠繼續使用 #塊變量與塊外部的變量同名 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提供了塊變量之外的塊局部變量。方法