اختبار المساواة في الرموز باستخدام واجهة برمجة تطبيقات روبي سي
-
13-12-2019 - |
سؤال
أحاول إيجاد طريقة لاختبار المساواة في الرمز في واجهة برمجة تطبيقات روبي سي.النظر في وظيفة ج التالية:
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
من وجهة نظر روبي ، لا تتصرف هذه الطريقة كما هو متوقع:
test_symbol_equality(:test) # => false
لماذا هذا هو الحال?كيف أحتاج إلى تغيير الكود لتحقيق السلوك المتوقع?
المحلول
أنت لا تقارن نفس الشيء في مثالك.
rb_intern
إرجاع ID
, ، ولكن كنت مقارنتها إلى VALUE
مباشرة.عليك أولا أن" بسط" VALUE
, ، استرداد ID
ويرتبط ذلك مع.استبدال الخاص بك if
بيان هذا يجب أن يحل مشكلتك:
if (rb_intern("test") == SYM2ID(symbol)) {
...
لا تنتمي إلى StackOverflow