c = a or b
:
若a为真,c = a ;a为假, c = b。
c = a and b
:
若a为真,c = b;a为假, c = nil
a = 10
b = 20
c = a or b
d = a and b
print(c)
print(d)
10
20
闭合函数:
一个函数包含另一个函数的调用,内部函数使用外部函数中的变量,生命周期延长
function func1()
local num = 1
return function () --返回函数
num = num + 1
return num
end
end
local f = func1() --获取返回的函数
local n = f() --再调用这个函数,获取返回值
print(n)
local n = f() --num等于上一个num直接加1
print(n)
>>2
>>3
非全局函数:
存储在局部变量中的函数称为非全局函数
--非全局函数:存储在局部变量中的函数称为非全局函数
local eat
local drink
eat = function( ... )
print("吃")
drink() --前面不声明直接调用会报错,调用不到
end
drink = function()
print("喝")
end
eat()
>>吃
>>喝
函数的尾调用:
一个函数的调用是另外一个函数的最后一个动作,上面代码eat方法里最后调用drink函数就是一个尾调用
-利用闭合函数是些迭代器:
function DieDai(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
t = {'11', '22', '33', '44'}
--访问1
local it = DieDai(t)
while true do
local value = it()
if value == nil then
break
end
print(value)
end
-- 访问2
for value in DieDai(t) do
print(value)
end
实现ipair迭代器
function DieDai(t)
local i = 0
return function()
i = i + 1
if i > #t or t[i] == nil then
return nil
end
return i, t[i]
end
end
--调用
t = {"一", "二", "三"}
for k, v in DieDai(t) do
print(k .. '\t' .. v)
end
网友评论