سؤال

لا أعرف كيف أتعامل معه nils وظيفة الفرز الخاصة بي تحصل.

عندما يكون لدي هذا التحقق من ذلك ، table.sort تحطم بعد بعض المكالمات.

if a == nil then
    return false
elseif b == nil then
    return true
end

مع هذا الخطأ:وظيفة طلب غير صالح للفرز. ولكن وفقًا للوثائق ، يجب أن تُرجع وظيفة الفرز FALSE ، إذا تم بعد ذلك ب. صحيح خلاف ذلك.

إذا قمت بإزالة هذا الرمز ، فإنه بالطبع يعطل فهرسة NILS.

هل كانت مفيدة؟

المحلول

هذا له علاقة ضئيلة أو لا شيء nil القيم في الجدول. يتم إنشاء رسالة الخطأ إذا كانت وظيفة المقارنة نفسها غير صالحة. من الوثائق table.sort:

لو comp يتم تقديمه ، ثم يجب أن تكون وظيفة تتلقى عنصرين جدول ، ويعود صحيحًا عندما يكون الأول أقل من الثانية (لذلك not comp(a[i+1],a[i]) سيكون صحيحا بعد هذا النوع).

بعبارات أخرى، comp(a,b) يجب أن يعني not comp(b,a). إذا لم تكن هذه العلاقة غير محتملة ، فمن المحتمل أن يتم رفع الخطأ "وظيفة الطلب غير الصالحة للفرز". (لاحظ أنه قد لا يتم رفعه في جميع الحالات.)

لكي نكون أكثر فائدة ، نحتاج حقًا إلى رؤية الوظيفة بأكملها تنتقل إليها table.sort.

نصائح أخرى

لوضع جميع القيم الخارجة في بداية المصفوفة:

  function mycomp(a,b)
    if a == nil and b == nil then
      return false
    end
    if a == nil then
      return true
    end
    if b == nil then
      return false
    end
    return a < b
  end

لوضع جميع قيم لا شيء في نهاية المصفوفة:

function mycomp(a,b)
  if a == nil and b == nil then
    return false
  end
  if a == nil then
    return false
  end
  if b == nil then
    return true
  end
  return a < b
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top