Тестирование равенства символов с использованием 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