• 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游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!
  • 相关阅读:
    nginx设置缓存策略
    http缓存原理理解
    promise教程
    vue项目发布到github演示
    vue路由嵌套子路由不渲染
    hihocoder 1403 1407 1415 后缀数组*3 最长公共子串/最长不重叠重复出现的子串/最长k次重复子串
    hdu 4691 后缀数组+rmq 求子串lcp
    hdu1506+ luogu 1440 单调栈/单调队列裸题
    codeforces 873F 后缀数组+单调栈(fastio)
    HihoCoder
  • 原文地址:https://www.cnblogs.com/vsirWaiter/p/14792864.html
Copyright © 2020-2023  润新知