2013-12-21 73 views
3

大多數情況下,當我看到Ruby中使用for循環時,編寫它的人並不熟悉Ruby。通常,當一個for循環被迭代器取代,如each等塊時,它更易讀。for循環的用法?

是否有任何使用for不能輕易被具有塊的迭代器重寫for的用例,或者使用for有什麼優勢?

for是否確實比迭代器方法更快,因爲for是關鍵字? for的目的是什麼?

+1

+1好問題。我懷疑downvotes是專門用於循環的讀者,通常循環遍歷索引。啊,我們永遠不會知道。無論如何,我期待閱讀討論。我不期望它會因爲問題的各個方面需要客觀答案而關閉。嗯,也許薩瓦認爲他會爲每個downvote拿起9分... –

+0

也許我是對的。投票日期:+6,-4。以前沒見過。 –

回答

2

塊語法通常由Ruby社區優選的。

使用foreach時,變量範圍有一個小的差異。 在for循環內聲明的變量將在循環外部可用,其中each塊中的變量在塊本地,並且在塊外部不可用。

+2

這是一個可變污染問題; 「for」無謂地污染了可變空間。 –

4

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 
+0

我沒有使用v1.8,但是我明白,在1.9之前,如果之前已經初始化了'n',那麼在'numbers.each do | n | ..end'之後的'n'將會在範圍內(例如'n = 0')。無論如何,我確信sawa意識到範圍差異,並且正在尋找其他優勢 - 如果存在的話 - 使用'for'。 –