lua调用lua的模块的调用
模块
module = {}
module.var = "siki"
module.func1 = function ()
print("这个是Module里面的函数")
end
--[[
function module.func1()
print("这个是Module里面的函数")
end
--]]
local function func2()
print("这个是局部函数fun2") --相当于一个私有函数 private
end
function module.func3()
func2()
print("这个是全局函数func3")
end
return module
调用上一模块
-- require "模块名"
-- require ("模块名")
m=require "module"
print(m.var)
m.func1()
--func2()
m.func3()
2.Lua中的元表
元表和普通表的区别
mytable = {“Lua”,”Java”,”C#”,”C++”} –普通表
mymetatable = {} –元表 元表扩展了普通表的行为
mytable =setmetatable(mytable,mymetatable)
print( mytable[3] )
print(getmetatable(mytable))
print(mymetatable)
tab = setmetatable({"Lua","Java","C#","C++"} , {__metatable="lock"} )
print(getmetatable(tab))
-- 使使用__metatable可以保护元表,禁止用户访问元表中的成员或者修改元表?
元表中的元方法
--1,__index当访问到一个不存在的索引的时候 起作用
mymetatable = {
__index = function (tab,key)
if(key>=10) then
return "Javascript"
end
end
}
newtable = {}
newtable[7]="Javascript"
newtable[8]="PHP"
newtable[9]="C"
mymetatable = {
__index = newtable
}
mytable =setmetatable(mytable,mymetatable)
print(mytable)
print(mytable[1])
print(mytable[9]) --__index用来处理访问到的索引不存在的时候,怎么办
--]]
--2,__newindex当我们对表的数据进行修改的时候,当我们修改的是一个新的索引的时候才会起作用 当我们给表添加新的键值对的时候,起作用
--mytable = {"Lua","Java","C#","C++"}
--[[
mymetatable = {
__newindex = function(tab,key,value)
print("我们要修改的key为:"..key.." 把这个key值修改为:"..value)
--mytable[key]=value
rawset(tab,key,value)
end
}
newtable = {}
mymetatable = {
__newindex = newtable
}
mytable =setmetatable(mytable,mymetatable)
mytable[1]="C#"
mytable[5]="Lua"
print(mytable[1])
print(mytable[5])
print(newtable[5])
给表添加操作符
mytable = {"Lua","Java","C#","C++","ccccc"} --普通表
mymetatable = {
__add = function(tab,newtab)--表的加法
local mi = 0
for k,v in pairs(tab)do
if(k>mi) then
mi = k
end
end
for k,v in pairs(newtab) do
mi=mi+1
table.insert(tab,mi,v)
end
return tab
end,
__call = function (tab,arg1,arg2,arg3)
print(arg1,arg2,arg3)
return "siki"
end,
__tostring = function (mytable)
local str = ""
for k,v in pairs(mytable) do
str = str..v..","
end
return str
end
} --元表 元表扩展了普通表的行为
mytable =setmetatable(mytable,mymetatable)
v = mytable(123,34,453)
print(v)
print(mytable)
2Lua中的协同程序
test()
///after code
///
// go on
//挂起一个函数 也叫做 暂停函数
--定义协同函数
--1,定义协同函数coroutine.create
--2,启动协同函数coroutine.resume
--3,暂停协同函数coroutine.yield
--4,继续运行 coroutine.resume (不需要传递参数)
--定义协同函数
co=coroutine.create(
function (a,b)
print(a+b)
print(coroutine.status(co))
print(a+b)
print(coroutine.status(co))
print( coroutine.running() )
coroutine.yield(a*b,a/b)
print(a-b)
return a%b,a/b+1
end
)
print( coroutine.running() )--返回正在跑的coroutine,一个coroutine就是一个线程,当使用running的时候,就是返回一个corouting的线程号
print(coroutine.status(co))--查看coroutine的状态注:coroutine的状态有三种:dead,suspend,running,具体什么时候有这样的状态请参考下面的程序
res1,res2,res3 = coroutine.resume(co,10,40)
print(res1,res2,res3)
print(coroutine.status(co))
print("I'm here!")
res1,res2,res3 = coroutine.resume(co)
print(res1,res2,res3)
print(coroutine.status(co))
--第一个yield的参数作为第一个resume的返回值
--第一个resume的参数作为协程的参数, 第二个resume的参数作为第一个yield的返回值
)