我正在看这条线:

    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
有帮助吗?

解决方案

块中的代码不再是“不可预测的”。比不使用块的模块中的代码。我是否写

module Foo
  def foo() "bar" end
end

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

我得到了同样的效果。两者都允许您扩展另一个类的功能,这是此方法的目的。

其他提示

在这种情况下,它允许您在oneliner中传递&amp;块,这使代码更具可读性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top