16383人加入学习
(66人评价)
Lua编程
价格 免费

面向对象编程:

new方法可以传递一个参数,创建对象的时候可以传递表,意思为在原有的基础上再加上这些属性

 

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

面向对象编程:

多态:

先定义一个原型,不做任何使用。

lua里面自带有new方法

function person:new()

t={}

setmetatable(t,{__index=self})

return t

end

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

面向对象编程:

函数用冒号创建可以直接在函数里面用self

调用的时候也要用冒号

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

面向对象编程:person={name="siki",age=99}

person.eat=

function()

print(person.name.."在吃饭")

end

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

lua中的垃圾回收机制:

lua中的垃圾回收自己每隔一段时间会自己调用

如果有需要的话可以自己手动调用

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

另一种读取的方法:

完全模式,可以统一时间读取多个文件

file=io.open("文件名字","r");

print(file:read())

print(file:read())

--file.cloase()

写:

file:write("www.sikiedu.com")

file:close

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

w打开只写文件 如果文件存在就会把该文件清空如果文件不存在就创建

a以附加的方式打开文件,如果文件存在写入的文件将加载末尾如果文件不存在就创建

r以只读的方式打开

r+以可读写的方式打开文件,该文件必须存在

w+以可读写的方式打开文件,若文件存在则内容清零,如果不存在就创建

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

协同函数:

获取协成的状态:

coroutine.status(co)返回值为状态:

running(运行)  suspended(暂停)  dead(死亡)

 

获取正在运行的协成:

coroutine.running()

 

协成死亡了以后就没有办法重新运行了

 

 

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

协同程序:

接受协同程序的返回值需要多个变量接受

因为第一个返回值会默认返回true和false用来表示协同程序是否启动成功

中间暂停的话可以再yield内传递参数,效果是一样的。

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

协同函数:

定义:

co=coroutine.wrap(

function(a.b)

print(a+b)

end

)

启动:

co(20,30)

此种方法不能暂停等,不实用

 

暂停协同函数:

coroutine.yield()

想让它开始的话再调用一下就行。他会从暂停的地方接着往下执行。继续运行的话可以不用传递参数

 

 

 

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

协同程序:

--定义协同函数:

coroutine.create(

function  (a,b)

print(a+b)

end

)

运行协同程序:

第一个参数是启动那个协同函数

coroutine.resume(co,20,30)

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

什么是lua的协同程序:

 

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

__tostring原方法当我们把表当作字符串来使用的时候调用此方法

__tostring=function(mytable)

local str=""

for k,v in pairs(mytable) do

   str=str..v..","

end
return str

end

 

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

__call原方法当我们把表当作函数来调用的时候默认使用__call原方法

__call=function(tab,arg)

   print(arg)

   return siki

end

[展开全文]
淡淡的阳 · 2018-10-02 · 该任务已被删除 0

__add函数当我们对表格进行假发运算的时候执行此函数

__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

tab.insert(tab,mi,v)

end

return tab

end

[展开全文]
淡淡的阳 · 2018-10-01 · 该任务已被删除 0

__newindex跟__index一样后面既可以跟方法,也可以跟表

当我们给表中添加新的键值对的时候调用__newIndex方法

有了__newindex方法后他不会自动添加进去,只会调用这个方法,如果我们想要将数据添加进去的话需要用到rawset方法

[展开全文]
淡淡的阳 · 2018-09-30 · 该任务已被删除 0

原表中存在的__metatable的键值对的话,setmetatable会失败。

__metatable可以用来保护元表

元表中的__index方法的作用是:

当我们访问表中不存在的key值的时候就会默认调用元表中的__index方法。__index可以是一个方法,也可以是一张表。

 

[展开全文]
淡淡的阳 · 2018-09-30 · 该任务已被删除 0

lua中的模块(相当于C#内的命名空间):

module={}一个模块

module.var=“siki”

module.func1=function()

print("这个是module里面的函数")

end

local function func2()

print("这个是局部函数")

end

function module.func3()

print("这个是全局函数")

end

return module

另一个脚本:

--require "模块名" 类似using

require “module”

print(module.var)

module.func1()

 

[展开全文]
淡淡的阳 · 2018-09-30 · 该任务已被删除 0

print(#xx)

#可以取得字符串的长度,也可以取得表格的长度。

[展开全文]
ZeroSoul · 2018-09-28 · 该任务已被删除 0

//定义全局变量

不需要数据类型,定义的所有变量都是全局的

//nil的用法

nil就相当于fales,lua中除了nil跟false其余都是true,

给变量或者表赋值nil就是清空内存

//表的创建语法跟用法(可以当键值对也可以当数组使用)

tab1 = {k1 = "v1",k2 = "v2"}

tab2 = {"a","b","c"}

//表的增加修改与删除

增加:tab1.k3 = "v3"

修改:tab1.k3 = "v4"

删除:tab1.k3 = nil

//if语法

if then

//for迭代器语法

for k,v in pairs() do

//for数值语法

for i ,j,k do

//函数语法(不需要返回值不需要数据类型)

Function xx()

 

[展开全文]
柯鑫鑫 · 2018-09-28 · 该任务已被删除 0