Lua爬坑手记
0x00 爬坑说明书 0x01 Lua的类型 function ConvertGameObjectIndex2Param(go)
local data_index = string.match(go,'%d')
print('data_index:',data_index) -- 1
end
ConvertGameObjectIndex2Param("obj1")
其中data_index是计算得出的索引,在后续的运算中却始终索引不到data_index在table中对应的值,由于data_index输出的log显示正常,起初并没有怀疑到这里。排查数据源确信没有问题后,我总记得在《Lua程序设计》中看到过一段作者列举table中各种索引使用的代码: 果然是纸上得来终觉浅,绝知此事要躬行啊。遂打印data_index的类型: function ConvertGameObjectIndex2Param(go)
local data_index = string.match(go,'%d')
print('date_index:',data_index,type(data_index)) -- 1 string
data_index = tonumber(data_index)
print('date_index:',type(data_index)) -- 1 number
end
使用tonumber()转换为number类型后,问题解决。 0x01 你到底是什么类型? 0x02 table数据的读取 local test_table = {}
index = 1
test_table[index] = "data_num"
test_table["index"] = "data_str"
print('test_table[index]',test_table[1]) -- data_num
print('test_table["index"]',test_table["index"]) -- data_str
print('test_table.index',test_table.index) -- data_str
要注意test_table.index是与test_table[“index”]完全等价的。上面的是不是so easy?那么进阶版来了: local test_table = {}
local num_index = 1
local str_index = "1"
test_table[num_index] = 'data_num'
test_table[str_index] = 'data_str'
print('test_table[num_index]',test_table[num_index]) -- data_num
print('test_table[str_index]',test_table[str_index]) -- data_str
print('test_table.num_index',test_table.num_index) -- nil
print('test_table.str_index',test_table.str_index) -- nil
print('test_table[tostring(num_index)]',test_table[tostring(num_index)]) -- data_str
print('test_table[tonumber(str_index)]',test_table[tonumber(str_index)]) -- data_num
print('test_table[1]',test_table[1]) -- data_num
print('test_table[01]',test_table[01]) -- data_num
print('test_table["01"]',test_table["01"]) -- nil
据说搞懂上面这一堆乱七八糟的东西可以召唤神龙! 0x03 自动转换之殇 local temp = '10' + 1
print(temp,type(temp)) -- 11 number
temp = '10 + 1'
print(temp,type(temp)) -- 10 + 1 string
Lua中还有字符串连接操作符..,当..出现在数字后面时,需要额外添加一个空格,以免Lua将之与小数点混淆: temp = 10 .. 20
print(temp,type(temp)) -- 1020 string
0x04 真亦假,假亦真 local condition1 = true
local condition2 = 0
local condition3 = ""
local condition4 = false
local condition5 = nil
if condition1 then print('condition1:',condition1) end -- true
if condition2 then print('condition2:',condition2) end -- 0
if condition3 then print('condition3:',condition3) end
if not condition4 then print('condition4:',condition4) end -- false
if not condition5 then print('condition5:',condition5) end -- nil
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |