将参数传递给回调块

Passing an argument to a callback block

我正在为我正在处理的 gem 编写一个简单的回调。请注意,由于某些体系结构限制,我无法针对此特定情况使用 ActiveSupport define_callbacks 方法。

现在,我有这样的东西:

def self.after_data_transcoding(&block)
  define_method :_after_data_transcoding_callback { block.call }
end

所以用例与此类似:

class MyClass
  after_data_transcoding do
  end
end

实际调用是由instance.send(:_after_data_transcoding_callback)完成的。

到目前为止,代码运行良好。我希望更进一步,能够将响应作为块参数访问:

class MyClass
  after_data_transcoding do |response|
    # Do something with the response
  end
end

然而,我并没有取得太大的成功。关于我应该如何进行的任何想法?

事实证明这比我想象的要容易。

define_method(:_after_data_transcoding_callback) { |response| 
  block.call(response) 
}

instance.send(:_after_data_transcoding_callback, response)