我不知道如何处理nils我的排序函数得到。

当我在它有这样的检查,table.sort一些来电之后崩溃。

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

使用此错误:的无效次函数用于分选即可。但根据该文件,排序函数应该返回false,如果B之后去。真否则。

如果我删除删除代码,这当然崩溃索引尼尔斯的。

有帮助吗?

解决方案

这具有很少或没有做与在表nil值。如果比较功能本身是无效时,将生成错误消息。从用于文档 table.sort

  

如果comp给出,那么它必须是一个   该接收两个表函数   元素,并返回true时   第一是小于第二(使得   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