Test de l'égalité des symboles à l'aide de Ruby API C
-
13-12-2019 - |
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?
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