在ruby中CONST_ID()的目的是什么?与rb_intern()有什么优势?

时间:2011-11-12 19:37:35

标签: c ruby

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

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

其中rb_intern()返回方法名称的一些内部represantation。 我见过一些代码

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

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

1 个答案:

答案 0 :(得分:4)

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

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