Tôi đang viết một phần mở rộng của Ruby 1,9 C và tôi muốn làm như sau trong ruby:Làm thế nào để chuyển đổi một Khối thành một Proc trong một phần mở rộng Ruby 1.9 C?
notifier = Notifier.new
notifier.on 'click' do
puts "clicked!"
end
Bây giờ vấn đề với điều này là theo phương pháp C, tôi chỉ "nhận" một khối, và, theo như tôi biết, nó thậm chí không phải là một tham số: Tôi chỉ có thể gọi với rb_yield
. Vì vậy, câu hỏi của tôi là: là có một cách trên một phần mở rộng Ruby 1.9 C, để chuyển đổi một khối thành một proc hoặc một cái gì đó, vì vậy tôi có thể lưu nó bên trong mô-đun của tôi, và gọi nó sau này bất cứ khi nào tôi muốn/cần chúng? Không. Giống như một cuộc gọi lại không đồng bộ!
Tôi đã triển khai thực hiện điều này với Procs/lambdas, nhưng thật xấu xí khi không sử dụng cú pháp khối trực tiếp.
Bạn đã thấy [this] (http://banisterfiend.wordpress.com/2008/09/25/metaprogramming-in-the-ruby-c-api-part-one-blocks/) bài viết (đặc biệt là "tường minh chặn "đoạn văn"? Nó có thể đã lỗi thời nhưng nếu không nó trông giống như những gì bạn cần. –
Xin lỗi, tôi không thể trả lời câu hỏi của bạn, vì tôi không biết C và API YARV C, nhưng làm rõ cho người đọc khác, câu hỏi của bạn về cơ bản là: "làm cách nào để làm' def on (& blk) end' từ C ", phải không? –