Quando scrivo metodi che accettano un blocco opzionale, io di solito usare qualcosa di similePerché "block_given?" Non funziona in questo metodo definito dinamicamente?
block.call if block_given?
Tuttavia, nel metodo definito come dinamicamente quella qui sotto, block_given?
non sembra funzionare.
class Foo
%w[bar baz].each do |method_name|
define_singleton_method(method_name) do |&block|
puts "Was #{method_name} given a block? #{block_given?}"
puts block.call
end
end
end
Foo.bar { puts 'I am a block' }
Il blocco si chiama come previsto, ma block_given?
restituisce false.
Perché è questo?