Lua学习笔记
发布时间:2020-12-14 22:03:37 所属栏目:大数据 来源:网络整理
导读:1. loadfile 、 loadstring : The environment of the returned function is the global environment . i?=?32local?i?=?0f?=?load("i?=?i?+?1;?print(i)")g?=?function?()?i?=?i?+?1;?print(i)?endf()?--?33g()?--?1 2. 适当缓存预编译好的chunk,在某些时
1. loadfile、loadstring: The environment of the returned function is the global environment. i?=?32 local?i?=?0 f?=?load("i?=?i?+?1;?print(i)") g?=?function?()?i?=?i?+?1;?print(i)?end f()?-->?33 g()?-->?1 2. 适当缓存预编译好的chunk,在某些时候能提高不少效率。 local?a_file?=?loadfile("a.lua");?--?or?local?a_string?=?loadstring("i=i+1"); a_file(); 3. Lua会调整实参个数以与形参个数一致:多余的实参丢弃,实参不足补nil。(multiple assignment也是如此) 4. 函数返回多个值时,只有当函数调用位于表达式最后或是唯一的表达式时,才会尽可能多的保留返回值,其它情况都只保留第1个返回值。 function?foo?()?return?"a",?"b"?end x,y,z?=?foo(),1????--?x="a",?y=1,?z=nil? x,z?=?1,foo(),2??--?x=1,?y="a",?z=2 x,foo()????--?x=1,?z="b" x,z?=?foo()??????--?x="a",?y="b",?z=nil
用括号将函数调用包围起来,可以强制函数只返回1个值。 x,z?=?(foo())??????--?x="a",?y=nil,?z=nil 5. closure: function?newCounter?() ????local?i?=?0 ????return?function?()?--?anonymous?function ????????i?=?i?+?1 ????????return?i ????end end c1?=?newCounter() print(c1())?-->?1 print(c1())?-->?2 c2?=?newCounter() print(c2())?-->?1 print(c1())?-->?3 print(c2())?-->?2 6. Proper Tail Calls: tail call不占用额外的栈空间,尾调用的嵌套层数是无限的(不受栈空间影响)。 function?foo?(n) ????if?n?>?0?then?return?foo(n?-?1)?end end In Lua,only a call with the form "return func(args)" is a tail call. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |