加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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. loadfileloadstring: 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读