我是Ruby新手。我的東西弄得我讀這裏:在Ruby中,爲什麼在你正在創建的調用中包裝「yield」?
http://alma-connect.github.io/techblog/2014/03/rails-pub-sub.html
他們提供了這樣的代碼:
# app/pub_sub/publisher.rb
module Publisher
extend self
# delegate to ActiveSupport::Notifications.instrument
def broadcast_event(event_name, payload={})
if block_given?
ActiveSupport::Notifications.instrument(event_name, payload) do
yield
end
else
ActiveSupport::Notifications.instrument(event_name, payload)
end
end
end
是什麼這樣的區別:
ActiveSupport::Notifications.instrument(event_name, payload) do
yield
end
對這樣做:
ActiveSupport::Notifications.instrument(event_name, payload)
yield
如果這是另一種語言,我可能會假設我們首先調用方法instrument()
,然後調用yield來調用該塊。但這不是他們寫的。他們顯示收益率嵌套在ActiveSupport::Notifications.instrument()
之內。
我應該假設ActiveSupport::Notifications.instrument()
正在返回某種迭代,我們將迭代?對於從ActiveSupport::Notifications.instrument()
返回的每件商品,我們是否要求退貨一次?