Тестирование равенства символов с использованием Ruby C API

StackOverflow https://stackoverflow.com//questions/11704861

  •  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)) {
    ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top