2015-05-29 2 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) 
Смежные вопросы