Unity之xlua热更新踩坑日记(一)

1.Dictionary类型相关操作

1.1根据key获取value

C#:value = dict["key"]

Lua:value = dict:get_Item("key")

1.2设置value

C#:dict["key"] = value

Lua:dict:set_Item("key",value)

官方的FAQ文档的解释是:

## this[string field]或者this[object field]操作符重载为什么在lua无法访问?(比如Dictionary\<string, xxx\>, Dictionary\<object, xxx\>在lua中无法通过dic['abc']或者dic.abc检索值)

因为:1、这个特性会导致基类定义的方法、属性、字段等无法访问(比如Animation无法访问到GetComponent方法);2、key为当前类某方法、属性、字段的名字的数据无法检索,比如Dictionary类型,dic['TryGetValue']返回的是一个函数,指向Dictionary的TryGetValue方法。

如果你的版本大于2.1.11,可以用get_Item来获取值,用set_Item来设置值。要注意只有this[string field]或者this[object field]才有这两个替代api,其它类型的key是没有的。

~~~lua
dic:set_Item('a', 1)
dic:set_Item('b', 2)
print(dic:get_Item('a'))
print(dic:get_Item('b'))
~~~

如果你的版本小于或等于2.1.11,建议直接方法该操作符的等效方法,比如Dictionary的TryGetValue,如果该方法没有提供,可以在C#那通过Extension method封装一个使用。

https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md

 

2.json解析


我使用的是LitJson,使用Lua的tostring()方法获取jsonData里的字符串,打印出来的格式是"小明: 2838492993",后面会多出来": 2838492993"这样的一串字符串,冒号后面的数字还是随机的,不知道是什么东西,所以只能新增一个函数处理

function strToStr(string jsonStr)
    --获取":"的下标
    local index = string.find(jsonStr, ":")
    --截取":"下标前的字符串
    return string.sub(jsonStr, 1, index-1)
end

3.string转int

local str = "123"
local num = tonumber(str)
print(num)

-------
123

4.解析bool类型的字段


Lua没有string转bool的方法,我想了个讨巧的方法。截取字符串的第一个字母,如果等于t或者T则为true,否则为false

function toBool(string jsonStr)
    if string.sub(jsonStr,1,1) == "t" or string.sub(jsonStr,1,1) == "T" then
        return true
    else
        return false
    end
end

5.还有一些逻辑运算符

比如~=、not之类的,不过这些都是语法问题,百度一下就知道了

猜你喜欢

转载自blog.csdn.net/weixin_42396898/article/details/94717234