• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua易错点

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

任何字符串进行数学运算时, 会自动向数字转换, 但是如果不能转换则会使程序默默退出.

任何不同类型的比较, 都是 false, 如 3 ~= "3".

 

for exp1, exp2, exp3 do <执行体> end 中, 三个表达式都是一次性求值.

for 中的控制变量会被自动声明为局部变量, 并且仅在循环体内可见.

    i = 5                       --> 全局 i.

    -- .....

    for i=1, 3, 1 do end        --> 这里的 i 是局部变量, 不是全局 i.
    print(i)                    --> 这里是全局 i, 没有改变, 依然是 5.

 

函数可以返回多个值, 只有函数作为表达式的最后一个值, 才能保留全部的返回值. 如下:

function foo0() end
function foo1() return 1 end
function foo2() return 1, 2 end

table x = {foo2(), 0}           --> t[1] = 1, t[2] = 0. 这里发生了截断
table y = {0, foo0(), foo2()}   --> t[1] = 0, t[2] = nil, t[3] = 1, t[4] = 2.

return (foo2()) 外层的大括号会使 foo2 的返回值只能保留第一个.

 

定义递归函数, 需要先声明, 后定义, 一定要分开写. 详见 <Lua 程序设计> 中文第二版 p51.

正确:

fun = function (arg) print('This is global function') end

local fun -- 这里很重要, 一定要先声明, 在定义. fun
= function (arg) if arg > 0 then fun(arg-1) print('This is local function') end end -- Right. fun(2) -- [[ This is local function This is local function ]]

错误:

fun = function (arg) print('This is global function') end

local fun = function (arg) if arg > 0 then fun(arg-1) print('This is local function') end end    -- Wrong! 这里首先执行了 global fun, 第二次才执行了 local fun.

fun(2)                --[[
                        This is global function
                        This is local function
                                                ]]

 

loadstring 所加载的程序块是在全局作用于下执行的, 因此任何 local 变量都不能被 loadstring 的程序块所见:

i = 123                        -- loadstring 可见.
local i = 'abc'

bar = loadstring('print(i)')   -- 只能看见全局 i. loadstring 在编译时不涉及词法域.

bar()                          -- 123

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
带联网功能的RFID宿舍门禁(一)-NodeMCU烧写ESP8266 lua固件及测试发布时间:2022-07-22
下一篇:
Lua获取当前时间发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap