Lua游戏开发(三)---Lua语言学习(下)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值