Testando igualdade de símbolos usando a API Ruby C
-
13-12-2019 - |
Pergunta
Estou tentando encontrar uma maneira de testar a igualdade de símbolos na API Ruby C.Considere a seguinte função C:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
Do ponto de vista Ruby, este método não se comporta conforme o esperado:
test_symbol_equality(:test) # => false
Por que isso acontece?Como preciso alterar o código para obter o comportamento esperado?
Solução
Você não está comparando a mesma coisa no seu exemplo.
rb_intern
retorna um ID
, mas você está comparando com o VALUE
diretamente.Você primeiro tem que “desembrulhar” o VALUE
, recuperando o ID
está associado.Substituindo seu if
declaração por isso deve resolver seu problema:
if (rb_intern("test") == SYM2ID(symbol)) {
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow