在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()有哪些优势?
答案 0 :(得分:4)
CONST_ID
宏调用rb_intern2
(与rb_intern
大致相同)来获取ID,但有一个很大的区别。如果您查看CONST_ID
中的include/ruby/ruby.h
宏源,您会看到它启动一个新块并定义一个静态ID
变量来缓存结果。如果,下次执行该块时,静态变量已经设置,它只返回缓存的结果,而不是重新搜索ID
。
所以他们做同样的事情,但CONST_ID
对于同一个字符串的多次查找应该更快。