它已關閉。這就像使用其他語言的功能,我。即在Ruby中,你有兩個選擇來遍歷集合:
for elem in collection
# do something
end
或
collection.each do |elem|
# do something
end
有這兩者之間的差別,但這裏我就不形容了。所以你可以看到它就像傳遞一個函數到方法裏面一樣。但是也有兩種方法可以通過阻止,使用do |variables| ... end
塊或{ |variables| ... }
塊。如果你想編寫自己的方法接受塊有再次是做到這一點的方法不止一種(他們是有點不同,但會運行相同的方式):
def run_3_times
yield
yield
yield
end
或
def run_3_times(&block)
block.call
block.call
block.call
end
兩個他們被稱爲以同樣的方式:
run_3_times { puts 'hello' }
# will yield
hello
hello
hello
,但會導致當塊沒有通過另一個錯誤:
# when using yield
LocalJumpError: no block given (yield)
# when using Proc.call
NoMethodError: undefined method `call' for nil:NilClass
from (pry):8:in `run_3_times'
這裏有一些文章吧:
它('respond_to')是一個正在傳遞塊(**關鍵字!**)的方法。另外,它應該是'end',而不是'ends' .. – 2012-07-26 06:30:18
它就像是一個自動執行的方法嗎? – murtaza52 2012-07-26 06:33:17
這取決於方法('respond_to')*調用*所需的塊(帶「yield」)。例如,Array.each'將爲每個元素*調用一次塊*(這對於空數組是完全不相同的;)。塊與匿名函數*類似,正如在JavaScript中常用的那樣。然而,它們不是*一級值(在該方法中,塊可以通過使用'&block'語法由'Proc'提升/提升)。 – 2012-07-26 06:33:44