Cuando escribo métodos que toman un bloque opcional, que suelen utilizar algo así como¿Por qué `` block_given? `No funciona en este método definido dinámicamente?
block.call if block_given?
Sin embargo, en el método definido de forma dinámica como la de abajo, block_given?
no parecen funcionar.
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' }
El bloque se llama como se esperaba, pero block_given?
vuelve falsa.
¿Por qué es esto?