जब मैं तरीकों कि एक वैकल्पिक ब्लॉक लेने के बारे में, मैं आम तौर पर की तरहइस गतिशील रूप से परिभाषित विधि में 'block_given?' क्यों काम नहीं करता है?
block.call if block_given?
हालांकि, विधि में गतिशील रूप से नीचे एक की तरह परिभाषित किया गया, block_given?
कुछ का उपयोग काम करने के लिए प्रतीत नहीं होता।
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' }
ब्लॉक को अपेक्षित कहा जाता है, लेकिन block_given?
झूठा रिटर्न देता है।
यह क्यों है?