اختبار المساواة في الرموز باستخدام واجهة برمجة تطبيقات روبي سي

StackOverflow https://stackoverflow.com//questions/11704861

  •  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)) {
    ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top