Wenn ich Methoden schreiben, die einen optionalen Block nehmen, verwende ich normalerweise so etwas wieWarum funktioniert `block_given?` Nicht in dieser dynamisch definierten Methode?
block.call if block_given?
in Verfahren jedoch definierte dynamisch wie die unten, block_given?
nicht zu funktionieren scheint.
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' }
Der Block wird wie erwartet aufgerufen, aber block_given?
gibt false zurück.
Warum ist das?