我正在尝试运行此代码,以覆盖 Array 实例的
each
:
my_array.define_singleton_method(:each, &block) do
super { |x| x.instance_exec(&block) }
end
问题是我收到此错误
both block arg and actual block given (SyntaxError)
,因为我向define_singleton_method
提供了两个块参数
如果我需要一个块来定义方法,如何在使用
each
的块时重新定义 each
?
您的问题是,当您实际上想要捕获
&block
作为新 define_singleton_method
方法的参数时,将 &block
作为参数传递给 each
。
您可以按如下方式完成此操作:
my_array = [1,2,3]
my_array.define_singleton_method(:each) do |&block|
super(&block)
end
这与
相同def my_array.each(&block)
super(&block)
end