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",则表示为非空表里有一个空类型 

小时候我把老婆种到地下,长大了我能收获一大堆老婆! 我是威少,我是一名Unity游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!
原文地址:https://www.cnblogs.com/vsirWaiter/p/14792864.html