for k,v in ipairs(t) do//(k表中数据编号,v表中数据内容,t表名) end
t1={"l","o","v","e"} //表中不同数据间要加 “,” for k,v in ipairs(t1) do print(v) end
break
退出循环
for i=1,100,2 do if i==21 then break else print(i) end end //1 3 5 7 9 11 13 15 17 19 21
return
函数返回值
function add(a,b) return a+b end print(add(100,200))
函数
定义
//1、 function func_name(argument-list) //(函数名 参数列表) statement-list //语句 end //2、 func_name=function(argment-list) statement-list end //3、表中定义函数 tab={} tab.func_name=function(argument-list) statement-list end //4、 tab={} tab={func_name=funcation(argument-list) statement-list end} //5、 tab={} function tab.func_name(argument-list) statement-list end
//1 function add(a,b) return a+b end //2 add=function(a,b) return a+b end //3 tab={} tab.add=function(a,b) return a+b end //4 tab={} tab={add=function(a,b) return a+b end} //5、常用 tab={} function tab.add(a,b) return a+b end
//可变参数 tab={} function tab.sum(...) //参数数量未指定 local s=0 for k,v in ipairs(arg) do //arg 还未指定的参数个数 s=s+v end return s end print(tab.num(1,2,3,4,5))
function out_func(argument-list) local var; return function(argument-list) end end
function newCounter() local i=0 return function() //内部函数 i=i+1 //使用外部函数的局部变量 return i end end c1=newCounter() print(c1()) //1 print(c1()) //2 print(c1()) //3
//尾调用 function aa() return 1 end function bb() a=a+1 b=b+1 return aa()+1 end
//表做函数参数 function sum(tab) local sum=0 for k,v in ipairs(tab) do sum=sum+v; end return sum end function mul(tab) local sum=1 for k,v in ipairs(tab) do sum=sum*v end return sum end tab={1,2,3,4} print(sum(tab)) print(mul(tab))
//运行协程 function f() print("hello") end co=coroutine.create(f) coroutine.resume(co) // hello
//完整的协程过程 function f1() while true do local res,v1,v2=coroutine.resume(c2,100,300) print(v1,v2) end end c1=coroutine.create(f1) function f2() while true do local v1,v2=coroutine.yield(1,3) print(v1,v2) end end c2=coroutine.create(f2) coroutine.resume(c1) //100 300 1 3 重复打印
t={1,2,3,4} n=table.getn(t) list=null for i=1,n do list={val=t[i],next=list} end print(list.val,list.next.val,list.next.next.val,list.next.next.next.val)
//定义迭代函数 function ipairs_iter(t,node) if node==nil then return t else return node.next
//初始化函数 function ipairs_list(t) return lpairs_iter,t,nil //返回迭代函数 //遍历链表 for node in ipairs_list(list) do print(node.val) end
//删除节点 function delnode(val) for node inpairs_list(list) do if node.next~=nil and node.next.val==val then local p=node.next node.next=p.next p.next=nil end end end delnode(list,3);
队列
元表
(_函数)实现两个表算术操作 (相加)(__add)
//元表相加 a={1,2,3} b={1,2,3} mt={} mt.__add=function(a,b) //定义元表 local len=table.getn(a) local res={} for i=1,len do res[i]=a[i]+b[i] end return res end setmetatable(a,mt) //设置元表 setmetatable(b,mt) c=a+b for k,v in ipairs(c) do print(v) end // 2 4 6
//元表 连接 a={1,2,3} b={1,2,3} mt={} mt.__cOncat=function(a,b) local len=table.getn(a) local res={} for i=1,len do res[i]=a[i]..b[i] end return res end setmetatable(a,mt) setmetatable(b,mt) c=a..b for k,v in ipairs(c) do print(v) end // 11 22 33
包(package)
//foo.lua 包 local class={} function class.foo(a,b) return a+b end return class
//调用包 require函数查找文件 local c=require("foo") print(c.foo(1,2))
系统库
// table.insert(t,i) t表名 local t={} for i=1,10 do table.insert(t,i) end for k,v in ipairs(t) do print(k,v) end
--复制函数 function clone(tab) local ins={} for k,v in pairs(tab) do ins[key]=v end return ins end function copy(dist,tab) for k,v in pairs(tab) do dist[key]=v end end people={} people.say=function(self) print("people say hi"..self.name) end people.new=function(name) local self=clone(people) self.name=name return self end --复制people类创建类实例 local p=people.new("ZhangSan") p.say(p) --p:say(p) man={} man.new=function(name) local self=people.new(name) copy(self,man) return self end