使用Ruby C API测试符号的相等性
-
13-12-2019 - |
题
我正在尝试找到一种方法来测试Ruby C API中的符号相等性。考虑以下C函数:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
从Ruby的角度来看,此方法的行为不像预期的那样:
test_symbol_equality(:test) # => false
为什么会这样?如何更改代码以实现预期行为?
解决方案
你没有在你的例子中比较同样的东西。
rb_intern
返回 ID
, ,但你把它比作 VALUE
直接。你首先必须"打开" VALUE
, ,检索 ID
它相关联。更换你的 if
这样做应该可以解决你的问题:
if (rb_intern("test") == SYM2ID(symbol)) {
...
不隶属于 StackOverflow