2012-07-28 65 views
3

我正试图找到一种方法来测试Ruby C API中的符号相等性。考虑下面的C函数:使用Ruby C API测试符号的相等性

static VALUE test_symbol_equality(VALUE self, VALUE symbol) { 
    if (rb_intern("test") == symbol) { 
    return Qtrue; 
    } else { 
    return Qfalse; 
    } 
} 

从视红宝石点,预期这种方法并不表现:

test_symbol_equality(:test) # => false 

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

回答

5

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

rb_intern返回ID,但您直接将其与VALUE进行比较。您首先必须“拆开”VALUE,检索它与之相关的ID。用此代替if声明应解决您的问题:

if (rb_intern("test") == SYM2ID(symbol)) { 
    ... 
相关问题