我不知道如何處理nils
我的排序函數獲取。在排序函數中處理nils
當我有這個檢查它,table.sort
在一些調用後崩潰。
if a == nil then
return false
elseif b == nil then
return true
end
有了這個錯誤:排序無效指令功能。但根據文檔,排序函數應該返回錯誤,如果一個後面b。否則爲真。
如果我刪除刪除該代碼,它當然是索引nils崩潰。
我不知道如何處理nils
我的排序函數獲取。在排序函數中處理nils
當我有這個檢查它,table.sort
在一些調用後崩潰。
if a == nil then
return false
elseif b == nil then
return true
end
有了這個錯誤:排序無效指令功能。但根據文檔,排序函數應該返回錯誤,如果一個後面b。否則爲真。
如果我刪除刪除該代碼,它當然是索引nils崩潰。
這有很少或沒有任何關係表中的值爲nil
。如果比較函數本身無效,則會生成錯誤消息。從table.sort
文件:
If
comp
is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so thatnot comp(a[i+1],a[i])
will be true after the sort).
換句話說,comp(a,b)
一定意味着not comp(b,a)
。如果這個關係不成立,那麼錯誤「用於排序的無效訂單功能」可能會上升。 (注意它可能不會在所有情況下都被提出。)
爲了更有幫助,我們真的需要看到傳遞給table.sort
的整個函數。
+1:在測試問題中的代碼之後,它會正確處理數組中的nil值。該問題必須在功能的其餘部分不一致。 – gwell 2010-01-26 18:28:20
應該強調「comp(a,b) - >!comp(b,a)」和「comp(a,b)==!comp(b,a)」不一樣。就像在a == b的情況下一樣,其中函數在兩次調用comp()時都會返回false。 – RJFalconer 2011-07-20 14:50:11
把所有零值在數組的開頭:
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
對不起,我想我沒有解釋得很清楚:首先,桌子上沒有零。其次,table.sort並不希望在那裏有這麼多的條件,因爲當我刪除零檢查它繼續,但崩潰零。 – mnn 2010-01-20 16:44:05
您應該發佈更多的代碼。在你的比較函數中獲得nils是可疑的。你確定問題出在那裏,而不是在附近嗎? – sbk 2010-01-21 00:04:11