علاج نيلز في وظيفة الفرز
سؤال
لا أعرف كيف أتعامل معه 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