Why would you make a module from a block?
Question
I was looking at this line:
extensions << Module.new(&block) if block_given?
It seems to create a new module and add it to an arry.
Why would you build a module from a block though? The block could be anything and then the extensions array becomes unpredictable.
Edit: This is from Sinatra's base class:
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
Solution
The code in a block is no more "unpredictable" than the code in a module made without using a block. Whether I write
module Foo
def foo() "bar" end
end
or
Foo = Module.new do
def foo() "bar" end
end
I get the same effect. Both allow you to extend another class's functionality, which is the purpose of this method.
OTHER TIPS
In this case it allows you to pass a &block inside oneliner, which makes code more readable.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow