大多數情況下,當我看到Ruby中使用for
循環時,編寫它的人並不熟悉Ruby。通常,當一個for
循環被迭代器取代,如each
等塊時,它更易讀。for循環的用法?
是否有任何使用for
不能輕易被具有塊的迭代器重寫for
的用例,或者使用for
有什麼優勢?
for
是否確實比迭代器方法更快,因爲for
是關鍵字? for
的目的是什麼?
大多數情況下,當我看到Ruby中使用for
循環時,編寫它的人並不熟悉Ruby。通常,當一個for
循環被迭代器取代,如each
等塊時,它更易讀。for循環的用法?
是否有任何使用for
不能輕易被具有塊的迭代器重寫for
的用例,或者使用for
有什麼優勢?
for
是否確實比迭代器方法更快,因爲for
是關鍵字? for
的目的是什麼?
塊語法通常由Ruby社區優選的。
使用for
或each
時,變量範圍有一個小的差異。 在for
循環內聲明的變量將在循環外部可用,其中each
塊中的變量在塊本地,並且在塊外部不可用。
這是一個可變污染問題; 「for」無謂地污染了可變空間。 –
6-8年前我在Rails書中看到了很多for
循環。但不再是首選。
迭代器變量的作用域有所不同。採取下面的例子:
numbers = [1, 2, 3]
numbers.each do |n|
# do nothing
end
begin
puts n
rescue Exception => e
puts e.message
end
for n in numbers do
# do nothing
end
puts "still: #{n}"
這將有這樣的輸出:
# undefined local variable or method `n' for main:Object
# still: 3
我沒有使用v1.8,但是我明白,在1.9之前,如果之前已經初始化了'n',那麼在'numbers.each do | n | ..end'之後的'n'將會在範圍內(例如'n = 0')。無論如何,我確信sawa意識到範圍差異,並且正在尋找其他優勢 - 如果存在的話 - 使用'for'。 –
+1好問題。我懷疑downvotes是專門用於循環的讀者,通常循環遍歷索引。啊,我們永遠不會知道。無論如何,我期待閱讀討論。我不期望它會因爲問題的各個方面需要客觀答案而關閉。嗯,也許薩瓦認爲他會爲每個downvote拿起9分... –
也許我是對的。投票日期:+6,-4。以前沒見過。 –