为什么我可以直接使用某些 ruby C 扩展数组方法,而不能直接使用其他方法?
我正在使用 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 有什么不同。
I am using many of the array methods found in array.c of the ruby codebase, but when trying to call
VALUE rIntersection = rb_ary_and(rAry1, rAry2);
I got this error:
dyld: lazy symbol binding failed: Symbol not found: _rb_ary_and
Referenced from: ./ext/ev/counters.bundle
Expected in: flat namespace
In other areas of my code I am using rb_ary_sort_bang, rb_ary_clear, rb_ary_reverse, etc etc. So I'm not sure why rb_ary_and is any different.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看看 http://www.ruby-doc.org /doxygen/1.8.4/array_8c-source.html(第 2666 行)
您可以看到方法 rb_ary_and 被声明为静态。这意味着它仅在 array.c 内部可见。
Have a look at http://www.ruby-doc.org/doxygen/1.8.4/array_8c-source.html (Line 2666)
There you can see that the method rb_ary_and is declared static. This means that it is only visible inside of array.c.
未经测试,但我认为这会起作用:
rb_funcall( rAry1, rb_intern("&"), 1, rAry2 )
Untested, but I would assume this would work:
rb_funcall( rAry1, rb_intern("&"), 1, rAry2 )