Lua基础知识三

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的返回值
)

你可能感兴趣的:(unity3d)