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

发布于 2024-11-18 11:09:14 字数 404 浏览 4 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

行至春深 2024-11-25 11:09:14

看看 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.

我乃一代侩神 2024-11-25 11:09:14

未经测试,但我认为这会起作用:

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

Untested, but I would assume this would work:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文