use*_*029 3 c ruby ruby-c-extension
我试图找到一种方法来测试Ruby C API中的符号相等性.考虑以下C函数:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
Run Code Online (Sandbox Code Playgroud)
从Ruby的角度来看,此方法的行为不符合预期:
test_symbol_equality(:test) # => false
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我如何更改代码以实现预期的行为?
你没有在你的例子中比较同样的事情.
rb_intern
返回一个ID
,但是你将它与VALUE
直接比较.你首先必须"解开" VALUE
,检索ID
它与之相关联.if
用这个替换你的陈述应该可以解决你的问题:
if (rb_intern("test") == SYM2ID(symbol)) {
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
177 次 |
最近记录: |