Почему я могу напрямую использовать некоторые методы массива расширений ruby ​​C, но не другие? - PullRequest
0 голосов
/ 02 июля 2011

Я использую многие методы массива, найденные в array.c кодовой базы ruby, но при попытке вызвать

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 ]

2 голосов
/ 02 июля 2011

Посмотрите на http://www.ruby -doc.org / doxygen / 1.8.4 / array_8c-source.html (строка 2666)

Там вы видите, что метод rb_ary_andобъявлен статический .Это означает, что он виден только внутри array.c .

1 голос
/ 09 марта 2012

Не проверено, но я бы предположил, что это будет работать:

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

...