lua中某個數據為userdata類型但打印為nil的問題


問題描述:

1、打印字段BonusStatus的類型,print( type(BonusStatus) ),其結果為userdata。

2、直接打印BonusStatus,print(BonusStatus),其結果為nil

3、將BonusStatus轉成string打印,print(tostring(BonusStatus)),其結果為nil

引發這個問題的原因:

一般來說是數據通過協議轉換后,得到了一個數據,這個數據是屬於一個類中包含了null類。

例如正常數據:BonusInfo":{"BonusStatus":{ a = 1,b=2,c=3,d=4}},如果是這樣,就應該是正常數據不會出現描述的異常。

但服務端傳遞過來的數據有可能是以下異常數據:

BonusInfo":{"BonusStatus":null}。

在服務端時,這個數據解析為BonusInfo類中包含一個名叫BonusStatus的類,但這個類為null。

此時在lua端的解析為類型為table的BonusInfo里面包含一個類型為userdata的BonusStatus,且這個BonusStatus的數據為nil。

原因是因為BonusInfo正常解析出來了,而BonusStatus則未正常解析。

但這個時候,你無法直接通過BonusStatus的類型或者數據去判斷,因為你總不能無事有事將它轉成string去判斷吧,萬一人家是正常的且有幾百個上千個字段呢。

處理辦法:

獲取BonusStatus元表的類型,直接判斷其是否為nil類型,若為nil,你再根據情況考慮是否將整個BonusStatus置為nil。

type(getmetatable(BonusStatus)) == "nil"

或者另外一種判斷方法:

tostring(BonusStatus) ~= "userdata: NULL" 

這種方式比判斷元表要來的更簡單,如果轉tostring后字符串為"userdata: NULL",則表示為非空表里有一個空類型 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM