为什么我能够直接使用某些ruby C扩展数组方法,而不是其他方法?

时间:2011-07-02 16:47:30

标签: c ruby ruby-c-extension

我正在使用ruby代码库的array.c中的许多数组方法,但在尝试调用时

VALUE rIntersection = rb_ary_and(rAry1, rAry2); 

我收到了这个错误:

dyld: lazy symbol binding failed: Symbol not found: _rb_ary_and
  Referenced from: ./ext/ev/counters.bundle
  Expected in: flat namespace

在我的代码的其他方面,我使用rb_ary_sort_bang,rb_ary_clear,rb_ary_reverse等等。所以我不确定为什么rb_ary_and有任何不同。

2 个答案:

答案 0 :(得分:2)

查看http://www.ruby-doc.org/doxygen/1.8.4/array_8c-source.html(第2666行)

在那里你可以看到方法rb_ary_and被声明为 static 。这意味着它只能在 array.c 中看到。

答案 1 :(得分:1)

未经测试,但我认为这样可行:

rb_funcall( rAry1, rb_intern("&"), 1, rAry2 )