2015-05-29 188 views
0

我正在爲正在編寫的寶石編寫簡單的回調函數。請注意,由於某些架構限制,我無法使用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

原來,這比我想象的要容易。

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

instance.send(:_after_data_transcoding_callback, response)