将参数传递给回调块

时间:2015-05-29 09:23:02

标签: ruby block

我正在为我正在研究的宝石写一个简单的回调。请注意,由于某些架构限制,我无法针对此特定情况使用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

但是,我还没有取得多大成功。关于我应该如何进行的任何想法?

1 个答案:

答案 0 :(得分:1)

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

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

instance.send(:_after_data_transcoding_callback, response)