Lua初探笔记初步

Lua所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。
易整合语言(glue language)。 可扩展性简单高效率与平台无关

1.Lua认为0和空串都是真,仅有false和nil为假。

lua 8种类型:number,string,function,nil,boolean,userdata,thread,table.

f={"a","b","c"}
list=nil
for line in f do
	list={next=list,value=line}
end

lua 3种if语句:
if bool then
	--body
end;
--
if bool then
	--body
else
	--body
end;
--
if bool then
	--body
elseif bool then
	--body
else
end;


lua for语句 2类:
for var=exp1,exp2,exp3 do
end;
exp3默认step=1

for i,v in ipairs(a) do
	--对num进行遍历
end

for i,v in pairs(a)do
	--对table进行遍历
end

o:func(n) <--> o.func(o,n)

unpack(a)  --返回a的所有元素
unpack的lua代码实现:
function unpack的lua代码实现(t,i)
	i=i or 1
	if t[i] then
		return t[i] ,unpack的lua代码实现(t,i+1)
	end
end

()用来函数定义和使用,{}用来定义table,[]用来索引table元素。

tab={d=function ()
	print("tab.d")
end}
function tab.a()
	print("tab.a")
end
tab.c=function ()
	print("tab.c")
end
for i,v in pairs(tab) do
	tab[i]()  or v()
end
table.sort( tab,function (a,b)
	return a<b
end )


6.1闭包:

function newCounter()
	local i = 0
	return function ()
		i=i+1
		return i
	end
end
c1=newCounter()
print(c1())
print(c1())

OldSin=math.sin
function math.sin( x )
	return OldSin(x*math.pi/180)
end

尾调用。



7.1迭代器与闭包:
迭代器可以遍历集合的每一个元素。
function list_iter( t )
	local i = 0
	local n = table.getn(t)  --lua5.2后 table.getn()已失效
	return function ()
		i=i+1
		if i<=n then return t[i] end
	end
end;
list_iter是一个工厂,每次调用他都会创建一个闭包(迭代器本身),闭包保存着内部局部变量(i,n,t).
list_iter中是返回t中的下一个元素值,直到nil。所以我们可以通过一个循环语句遍历list_iter迭代器
来达到遍历t中每一个元素的效果。
lua范性for的两种实现ipairs()的方式:
1:非闭包实现ipairs():
function iter(a,i )  --迭代器/迭代函数
	i=i+1
	if a[i] then
		return i,a[i]
	else
		return nil
end
function aaa( tab )  --返回迭代函数(iter、状态常量(tab)、控制变量(0),将状态常量和控制变量作为参数调用迭代函数。
	return iter,tab,0
end
tab={"zzz","bbb","de"}
for i,j in aaa(tab)do
	print(i,j)      --输出
end
-----------------------------------------------
2.闭包实现ipairs()
function bbb( tab )
	local i = 0  		--作为下面匿名函数的upvalue,和下面匿名函数共同构成一个闭包。
	return function ()
		i=i+1
		if tab[i] then
			return i,tab[i]
			else
				return nil
			end
	end
end
for i,j in bbb(tab)do
	print(i,j)   	--输出
end



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值