使用块参数定义_singleton_method(或者,如何给出两个块作为参数)

问题描述 投票:0回答:1

我正在尝试运行此代码,以覆盖 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

ruby singleton metaprogramming
1个回答
0
投票

您的问题是,当您实际上想要捕获

&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 
© www.soinside.com 2019 - 2024. All rights reserved.