我正在看这条线:
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 :(得分:3)
块中的代码不会比不使用块的模块中的代码“不可预测”。我是否写
module Foo
def foo() "bar" end
end
或
Foo = Module.new do
def foo() "bar" end
end
我得到了同样的效果。两者都允许您扩展另一个类的功能,这是此方法的目的。
答案 1 :(得分:0)
在这种情况下,它允许您在oneliner中传递&amp;块,这使代码更具可读性。