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之类的,不过这些都是语法问题,百度一下就知道了