我在Ruby C扩展中存储一个proc数组,我需要经历每个proc的instance_eval。问题是instance_eval只接受块,而不是procs。这不是Ruby中的问题,我可以简单地去:
proc_list.each { |my_proc|
@receiver.instance_eval(&my_proc)
}
但是我不确定如何使用Ruby C API来解决这个问题。
有没有人有任何想法如何实现这一目标?
答案 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中的警告一致。