Khi tôi viết phương pháp mà phải mất một khối không bắt buộc, tôi thường sử dụng một cái gì đó giống nhưTại sao `block_given?` Không hoạt động trong phương pháp được xác định động này?
block.call if block_given?
Tuy nhiên, trong phương pháp định nghĩa tự động như hình dưới đây, block_given?
dường như không làm việc.
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' }
Khối được gọi như mong đợi, nhưng block_given?
trả về giá trị sai.
Tại sao điều này?