6.table
function mian()
a = {3,5,7,nil,x=2,y=3,"string"="hello",nil}
b = {3,5,7,nil,x=2,y=3,"string"="hello"}
--table求长度
len = #a --len=3
len = #b --len=7
len = table.maxn(a) --len=7 maxn求table的长度
--table遍历
for k,v in next,a do
print(k..v) --输出除了nil之外的所有键值对
end
for k,v in ipairs(a) do --只输出1,2,3等数组元素
print(k..v)
end
for k,v in pairs(a) do
print(k..v) --输出所有键值对
end
--table改写
a[1] = 2 --a[1]由3变成2
a["string"] = "what"
--table插入删除
table.insert(a,2,9) --插入,只针对数组. a[2]由5变成9
table.insert(a,10) --插入到数组尾部,即a[4]=10
remove(a,1) --删除"a[1]=2",数组重新排序
remove(a) --删除数组尾部那一项
end
7.I/O
--io.open两个参数,文件名和操作方式
myfile = io.open("test_lua.lua","w")
if myfile ~= nil then
myfile:write("---write this string into the file---")
io.close(myfile)
end
8.协同程序
function main()
local co = coroutineFun()
coroutine.resume(co) --调用协程co, 1
coroutine.resume(co) --2
local co1 = coroutineFun1()
coroutine.resume(co1,2,3) --5
coroutine.resume(co1,4,5) --5,只有第一次传入的参数有效
print(coroutine.status(co1)) --输出协程co1的状态
end
function coroutineFun()
local co = coroutine.create(function()
for i=1,10 do
print(i)
coruotine.yield() --挂起协程
end
end)
return co
end
function coroutineFun1()
--可以带参数
local co = coroutine.create(function(a,b)
for i = 1,10 do
print(a+b)
end
end)
return co
end
9.闭包
function main()
f = closureFunc(0)
f1 = closureFunc(3)
for i = 1,10 do
f() --依次输出1到10
f1() --依次输出4到13
end
end
function closureFunc(ii)
local ii = 0
function myFun() --可以将局部变量ii一直保存到内存中
ii = ii + 1
print(ii)
end
return myFun
end
10.面向对象
Lua本身不支持面向对象,但通过tolua++这个第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C++语言库的脚本文件.
MyClass.lua
local MyClass = class("MyClass")
MyClass.name = "jugl"
MyClass.age = 82
function MyClass:ctor()
print("this is the constructor function")
end
function MyClass:memberFun()
print("this is a member function of MyClass")
end
function MyClass:setName(nm)
MyClass.name = nm --类似于c++中的静态成员变量
self.name = nm --类似于c++类的实例的普通成员变量
end
return MyClass
在调用文件中main.lua
local classMy = require("MyClass")
function main()
local cls = classMy:new() --构造一个classMy对象
cls.memberFun() --类似于c++中的MyClass::memberFun()
cls:memberFun() --类似于c++中的cls.memberFun()
end
类的继承
local myclass = require("MyClass")
local inheritClass = class("inheritClass",myclass)
function inheritClass:ctor()
self.super:ctor()
print("this is the constructor function of myclass")
end
return inheritClass