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
閉合函數(shù):
一個(gè)函數(shù)包含另一個(gè)函數(shù)的調(diào)用仰坦,內(nèi)部函數(shù)使用外部函數(shù)中的變量履植,生命周期延長(zhǎng)
function func1()
local num = 1
return function () --返回函數(shù)
num = num + 1
return num
end
end
local f = func1() --獲取返回的函數(shù)
local n = f() --再調(diào)用這個(gè)函數(shù),獲取返回值
print(n)
local n = f() --num等于上一個(gè)num直接加1
print(n)
>>2
>>3
非全局函數(shù):
存儲(chǔ)在局部變量中的函數(shù)稱為非全局函數(shù)
--非全局函數(shù):存儲(chǔ)在局部變量中的函數(shù)稱為非全局函數(shù)
local eat
local drink
eat = function( ... )
print("吃")
drink() --前面不聲明直接調(diào)用會(huì)報(bào)錯(cuò)悄晃,調(diào)用不到
end
drink = function()
print("喝")
end
eat()
>>吃
>>喝
函數(shù)的尾調(diào)用:
一個(gè)函數(shù)的調(diào)用是另外一個(gè)函數(shù)的最后一個(gè)動(dòng)作玫霎,上面代碼eat方法里最后調(diào)用drink函數(shù)就是一個(gè)尾調(diào)用
-利用閉合函數(shù)是些迭代器:
function DieDai(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
t = {'11', '22', '33', '44'}
--訪問(wèn)1
local it = DieDai(t)
while true do
local value = it()
if value == nil then
break
end
print(value)
end
-- 訪問(wèn)2
for value in DieDai(t) do
print(value)
end
實(shí)現(xiàn)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
--調(diào)用
t = {"一", "二", "三"}
for k, v in DieDai(t) do
print(k .. '\t' .. v)
end