概括Lua使用中遇到的小问题
发布时间:2021-11-19 11:04:42 所属栏目:教程 来源:互联网
导读:Lua可以被C/C++ 代码调用,反过来也可以调用C/C++的函数,这使得Lua被广泛应用。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。Lua在目前解释型脚本引擎中,速度是最快的,这决定了Lua嵌入式脚本的最佳选择。文章列举lua
Lua可以被C/C++ 代码调用,反过来也可以调用C/C++的函数,这使得Lua被广泛应用。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。Lua在目前解释型脚本引擎中,速度是最快的,这决定了Lua嵌入式脚本的最佳选择。文章列举lua使用中遇到的小问题,做个汇总。 if判断 lua把 nil 和false 视为“假”,其他都为“真” local变量声明 local var1=1,var2 以上 ,var1和var2的作用域不同,var1是所在作用域的变量,var2可能是全局变量。实际上述命令解释后为 var1 取 "1,var2" 组成的值第一个值,类似 local var1 = ... 正确的写法是: local var1, var2=1 table是否为空 if a == {} then 结果是false,这是一个逻辑错误,实际比较table a的内存地址和一个匿名table的是否相同 正确的写法是: if next(a) == nil then 多个变量赋值 name,name = 1,2 那name等于多少呢? 实际上name值为1,可以写个小例子 a,b = 2,3,4打印汇编码就可以看到了。 方法:luac -l test.lua table的key规则 t[name]与t["name"], t.name 第一种和后两种是不同的,第一种会根据取name的值做key,后两种以 "name"做key。这种情况还有: t = {[name] = 1} t = {name = 1} t = {["name"] = 1} table引用问题 将一个table复制给另外一个table,修改这个新的table值会影响原来的table,但通过clone可以改变这一行为。 -- 下面的代码,t2 是 t1 的引用,修改 t2 的属性时,t1 的内容也会发生变化 local t1 = {a = 1, b = 2} local t2 = t1 t2.b = 3 -- t1 = {a = 1, b = 3} <-- t1.b 发生变化 -- clone() 返回 t1 的副本,修改 t2 不会影响 t1 local t1 = {a = 1, b = 2} local t2 = clone(t1) t2.b = 3 -- t1 = {a = 1, b = 2} <-- t1.b 不受影响 这里也补充一个深度复制的函数: function table.deepcopy(object) local lookup_table = {} local function _copy(object) if type(object) ~= "table" then return object elseif lookup_table[object] then return lookup_table[object] end local new_table = {} lookup_table[object] = new_table for index, value in pairs(object) do new_table[_copy(index)] = _copy(value) end return setmetatable(new_table, getmetatable(object)) end return _copy(object) end 函数返回值 > function f123() return 1, 2, 3 end > function f456() return 4, 5, 6 end > print(f123(), f456()) 1 4 5 6 > print(f456(), f123()) 4 1 2 3 > print(f456()) 4 5 6 > print(f456(),1) 4 1 如果函数不是处于列的最后一个,只返回一个值 ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |