zoukankan      html  css  js  c++  java
  • 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游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!
  • 相关阅读:
    LeetCode-165 Compare Version Numbers
    shop--6.店铺注册--Thumbnailator图片处理和封装Util
    shop--6.店铺注册
    shop--5.使用Junit进行验证
    shop--4.SSM的各项配置
    shop--3.配置Maven
    shop--2.项目设计和框架搭建
    shop--1.创建maven项目
    AJAX 使用FormData 传送数据 DATA 为空 现象的处理
    Daemon Thread [http-nio-8080-exec-5] (Suspended (exception UnsatisfiedDependency))
  • 原文地址:https://www.cnblogs.com/vsirWaiter/p/14792864.html
Copyright © 2011-2022 走看看