2009-09-10 104 views
1

我看着這條線:你爲什麼要從一個塊創建一個模塊?

extensions << Module.new(&block) if block_given? 

這似乎是創建一個新的模塊,並將其添加到ARRY。

你爲什麼要從一個塊創建一個模塊?該塊可以是任何東西,然後擴展數組變得不可預知。

編輯:這是從Sinatra的基類:

def register(*extensions, &block) 
    extensions << Module.new(&block) if block_given? 
    extensions.each do |extension| 
     extend extension 
     extension.registered(self) if extension.respond_to?(:registered) 
    end 
    end 
+0

您能否提供更多的上下文?什麼庫包含這一行代碼? –

+0

這是來自Sinatra的基礎班。 – uzo

回答

3

在一個塊中的代碼是不超過不使用塊製成的模塊中的代碼更「不可預測」。不管我寫

module Foo 
    def foo() "bar" end 
end 

Foo = Module.new do 
    def foo() "bar" end 
end 

我得到同樣的效果。兩者都允許您擴展另一個類的功能,這是此方法的目的。

0

在這種情況下,它允許您將一個&塊傳遞給oneliner,從而使代碼更具可讀性。