Pregunta

Estoy tratando de encontrar una manera de símbolo de la prueba de la igualdad en el Rubí C API.Considere la siguiente función de C:

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

De la Ruby punto de vista, este método no se comportan como se esperaba:

test_symbol_equality(:test)    # => false

¿Por qué es este el caso?¿Cómo tengo que cambiar el código para lograr el comportamiento esperado?

¿Fue útil?

Solución

No estás comparando la misma cosa en su ejemplo.

rb_intern devuelve un ID, pero se lo compara con el VALUE directamente.Primero tienes que "unwrap" el VALUE, la recuperación de los ID la que está asociada.La sustitución de su if declaración por esto debería solucionar tu problema:

if (rb_intern("test") == SYM2ID(symbol)) {
    ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top