如何将Proc转换为Ruby C扩展中的块?

时间:2009-08-06 20:46:23

标签: c ruby ruby-c-extension

我在Ruby C扩展中存储一个proc数组,我需要经历每个proc的instance_eval。问题是instance_eval只接受块,而不是procs。这不是Ruby中的问题,我可以简单地去:

proc_list.each { |my_proc|
    @receiver.instance_eval(&my_proc)
}

但是我不确定如何使用Ruby C API来解决这个问题。

有没有人有任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

从镐,p。 871(1.9版)

  

VALUE rb_iterate( VALUE (*method)(), VALUE args, VALUE (*block)(), VALUE arg2 )

     

使用参数args和块块调用方法。一个yield   方法将使用赋予yield的参数和第二个来调用块   论证arg2。

因此,将Proc个对象作为arg2传递,并定义(*block)()函数,该函数只是将传递的值转发给Proc的{​​{1}}方法。< / p>

这样的东西
#call

我没有测试过这段代码,但它与this article中的警告一致。