Как преобразовать блок в процесс в расширении Ruby 1.9 C?

Я пишу расширение Ruby 1.9 C, и я хочу сделать следующее в ruby:

notifier = Notifier.new
notifier.on 'click' do
  puts "clicked!"
end

Теперь проблема в том, что на метод C, я только "получаю" блок, и, насколько мне известно, это даже не параметр: я просто могу вызвать with с помощью rb_yield .

Итак, мой вопрос: есть ли способ в расширении Ruby 1.9 C преобразовать блок в процесс или что-то в этом роде, чтобы я мог сохранить его внутри своего модуля и вызывать его позже, когда они мне понадобятся / понадобятся? Как асинхронный обратный вызов!

Я уже реализовал это с помощью Procs / lambdas, но просто уродливо не использовать синтаксис блока напрямую.

6
задан Matheus Moreira 24 February 2012 в 16:11
поделиться