Test dell'uguaglianza dei simboli usando l'API Ruby C
-
13-12-2019 - |
Domanda
Sto cercando di trovare un modo per testare l'uguaglianza simbolo nell'API Ruby C.Considera la seguente funzione C:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
.
Dal punto di vista del rubino, questo metodo non si comporta come previsto:
test_symbol_equality(:test) # => false
.
Perché è così il caso?Come devo cambiare il codice per ottenere il comportamento previsto?
Soluzione
Non stai confrontando la stessa cosa nell'esempio.
rb_intern
restituisce un ID
, ma lo stai confrontando direttamente con il VALUE
direttamente.Per prima cosa devi "scartare" il VALUE
, recuperando il ID
con cui è associato.Sostituzione della tua dichiarazione if
da questo dovrebbe risolvere il tuo problema:
if (rb_intern("test") == SYM2ID(symbol)) {
...
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow