我正在尝试找到一种方法来测试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)) {
    ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top