gpt4 book ai didi

c - ruby 中 CONST_ID() 的用途是什么?与 rb_intern() 相比有哪些优势?

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:50 25 4
gpt4 key购买 nike

在 ruby​​ 的 c 扩展中,调用你可以做的方法

rb_funcall(object, rb_intern("method name"), argumentcount, arg1, arg2, …);

其中 rb_intern() 返回方法名称的一些内部表示。我看到了一些代码,而不是

ID method;
CONST_ID(method, "method name");
rb_funcall(object, method, argumentcount, arg1, arg2, …);

rb_intern() 和 CONST_ID 到底有什么区别。 CONST_ID()有哪些优势?

最佳答案

CONST_ID 宏调用rb_intern2(与rb_intern 大致相同)来获取ID,但有一个很大的区别。如果您查看 include/ruby/ruby.h 中的 CONST_ID 宏源代码,您会看到它启动了一个新 block 并定义了一个静态 ID 变量来缓存结果。如果下次执行该 block 时,静态变量已经设置,它只返回缓存的结果,而不是重新搜索 ID

所以他们做同样的事情,但是 CONST_ID 对于同一字符串的多次查找应该更快。

关于c - ruby 中 CONST_ID() 的用途是什么?与 rb_intern() 相比有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com