Pruebas de igualdad de símbolos utilizando el Rubí de la API en C
-
13-12-2019 - |
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?
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