使用此示例:對於循環變量範圍
arr = [1, 2, 3]
for elem in arr do
puts elem
end
puts elem # => 3
代碼輸出:
1
2
3
3
elem
包含連外循環的值。爲什麼?循環之外的範圍是什麼?
請問誰能澄清?
使用此示例:對於循環變量範圍
arr = [1, 2, 3]
for elem in arr do
puts elem
end
puts elem # => 3
代碼輸出:
1
2
3
3
elem
包含連外循環的值。爲什麼?循環之外的範圍是什麼?
請問誰能澄清?
這是預期的。按照documentation:
的
實例與for
循環類似於使用each
,但不創建一個新的變量範圍。for
:
for i in 1..3
end
i #=> 3
例與each
:
(1..3).each do |i|
end
i #=> NameError: undefined local variable or method `i'
如果我沒有記錯,方法(each
,map
,loop
,upto
)創建變量的作用域,而關鍵字(for
,while
,until
)不。
你可以在循環範圍外聲明你的變量elem。因此,如果我們修改您的示例:
arr = [1, 2, 3];
elem;
for elem in arr do
puts elem
end
puts elem # => 3
for
語句定義變量elem
並使用當前循環的值對其進行初始化。
要避免這一點Array#each:
arr.each do |elem|
puts elem
end
# 1
# 2
# 3
# => [1, 2, 3]
elem
NameError: undefined local variable or method `elem' for main:Object
from (irb):5
from /usr/bin/irb:12:in `<main>'
現在ELEM變量僅在塊存在。
自從循環引入範圍時? – hek2mgl
變量'elem'是否有範圍? –
'for'在Ruby代碼中不推薦使用,因爲它泄露了中間變量。相反,我們使用'each'或'upto'或'count'來迭代。 –