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?

È stato utile?

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
scroll top