【问题标题】:Testing equality of symbols using the Ruby C API使用 Ruby C API 测试符号的相等性
【发布时间】:2012-07-28 21:39:52
【问题描述】:

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

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

【问题讨论】:

    标签: c ruby ruby-c-extension


    【解决方案1】:

    在你的例子中你没有比较相同的东西。

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

    if (rb_intern("test") == SYM2ID(symbol)) {
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多