Question

Je suis en train d'essayer de trouver un moyen de tester le symbole de l'égalité dans le Ruby C API.Considérons la fonction C suivante:

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

À partir de l'Ruby point de vue, cette méthode ne se comportent pas comme prévu:

test_symbol_equality(:test)    # => false

Pourquoi est-ce le cas?Comment ai-je besoin de modifier le code pour obtenir le comportement attendu?

Était-ce utile?

La solution

Vous ne compare pas la même chose dans votre exemple.

rb_intern retourne un ID, mais vous êtes en les comparant à la VALUE directement.Vous devez tout d'abord à "déballer" les VALUE, de la récupération de la ID il est associé.Le remplacement de votre if déclaration ce qui devrait résoudre votre problème:

if (rb_intern("test") == SYM2ID(symbol)) {
    ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top