我不知道如何处理nils
我的排序功能。
当我检查它时,table.sort
在一些呼叫后崩溃。
if a == nil then
return false
elseif b == nil then
return true
end
出现此错误:排序功能无效。但是根据文档,如果 a 在 b 之后,排序函数应该返回 false。否则为真。
如果我删除删除该代码,它当然会崩溃索引 nil。
nil
这与表中的值几乎没有关系。如果比较函数本身无效,则会生成错误消息。从文档中table.sort
:
如果
comp
给出,那么它必须是一个接收两个表格元素的函数,并在第一个小于第二个时返回 true(因此not comp(a[i+1],a[i])
在排序后为 true)。
换句话说,comp(a,b)
必须暗示not comp(b,a)
。如果此关系不成立,则可能会出现“排序功能无效”的错误。(请注意,它可能不会在所有情况下都被提出。)
为了更有帮助,我们确实需要查看传递给table.sort
.
要将所有 nil 值放在数组的开头:
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
要将所有 nil 值放在数组的末尾:
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