3

我正在尝试找到一种在 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

为什么会这样?我如何需要更改代码以实现预期的行为?

4

1 回答 1

5

在您的示例中,您没有比较相同的内容。

rb_intern返回 an ID,但您将其与VALUE直接进行比较。您首先必须“解包” VALUE,检索ID与之关联的 。用这个替换你的if语句应该可以解决你的问题:

if (rb_intern("test") == SYM2ID(symbol)) {
    ...
于 2012-07-28T22:00:23.487 回答