Testen der Symbolgleichheit mit der Ruby C API
-
13-12-2019 - |
Frage
Ich versuche, eine Möglichkeit zu finden, die Symbolgleichheit in der Ruby C-API zu testen.Betrachten Sie die folgende C-Funktion:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
Aus Ruby-Sicht verhält sich diese Methode nicht wie erwartet:
test_symbol_equality(:test) # => false
Warum ist das so?Wie muss ich den Code ändern, um das erwartete Verhalten zu erzielen?
Lösung
Sie vergleichen in Ihrem Beispiel nicht dasselbe.
rb_intern
gibt eine zurück ID
, aber Sie vergleichen es mit dem VALUE
direkt.Sie müssen das Gerät zunächst „auspacken“. VALUE
, Abrufen der ID
es ist damit verbunden.Ersetzen Sie Ihre if
Die folgende Aussage sollte Ihr Problem lösen:
if (rb_intern("test") == SYM2ID(symbol)) {
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow