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?

Foi útil?

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