我一直在使用Ruby一年以下,但我仍然不完全理解「是什麼讓塊打勾」。特別是我很好奇在一個街區範圍內有多少控制。例如,說我有這樣的代碼:如何修改傳遞給塊的作用域?
class Blob
attr_accessor :viscosity
def configure(&:block)
block.call self
end
end
blob = Blob.new
blob.configure do |b|
b.viscosity 0.5
end
顯然有一個人爲的例子。
現在,我從Rails 2移植到Rails 3時注意到的一件事是,它們的許多配置方法不再採用非阻塞參數。
例如,在routes.rb中,它曾經是ActionController::Routing::Routes.draw do |map| ... end
,現在它只是ActionController::Routing::Routes.draw do ... end
。但是塊內部調用的方法仍然具有適當的上下文,而不需要反覆重複塊的參數名稱。
在我上面的例子,那麼,我希望能夠做到:
blob.configure do
viscosity 0.5
end
,這樣我可以告訴人們是多麼容易寫在Ruby DSL。 :)