面向对象编程:
new方法可以传递一个参数,创建对象的时候可以传递表,意思为在原有的基础上再加上这些属性
面向对象编程:
new方法可以传递一个参数,创建对象的时候可以传递表,意思为在原有的基础上再加上这些属性
面向对象编程:
多态:
先定义一个原型,不做任何使用。
lua里面自带有new方法
function person:new()
t={}
setmetatable(t,{__index=self})
return t
end
面向对象编程:
函数用冒号创建可以直接在函数里面用self
调用的时候也要用冒号
面向对象编程:person={name="siki",age=99}
person.eat=
function()
print(person.name.."在吃饭")
end
lua中的垃圾回收机制:
lua中的垃圾回收自己每隔一段时间会自己调用
如果有需要的话可以自己手动调用
另一种读取的方法:
完全模式,可以统一时间读取多个文件
file=io.open("文件名字","r");
print(file:read())
print(file:read())
--file.cloase()
写:
file:write("www.sikiedu.com")
file:close
w打开只写文件 如果文件存在就会把该文件清空如果文件不存在就创建
a以附加的方式打开文件,如果文件存在写入的文件将加载末尾如果文件不存在就创建
r以只读的方式打开
r+以可读写的方式打开文件,该文件必须存在
w+以可读写的方式打开文件,若文件存在则内容清零,如果不存在就创建
协同函数:
获取协成的状态:
coroutine.status(co)返回值为状态:
running(运行) suspended(暂停) dead(死亡)
获取正在运行的协成:
coroutine.running()
协成死亡了以后就没有办法重新运行了
协同程序:
接受协同程序的返回值需要多个变量接受
因为第一个返回值会默认返回true和false用来表示协同程序是否启动成功
中间暂停的话可以再yield内传递参数,效果是一样的。
协同函数:
定义:
co=coroutine.wrap(
function(a.b)
print(a+b)
end
)
启动:
co(20,30)
此种方法不能暂停等,不实用
暂停协同函数:
coroutine.yield()
想让它开始的话再调用一下就行。他会从暂停的地方接着往下执行。继续运行的话可以不用传递参数
协同程序:
--定义协同函数:
coroutine.create(
function (a,b)
print(a+b)
end
)
运行协同程序:
第一个参数是启动那个协同函数
coroutine.resume(co,20,30)
什么是lua的协同程序:
__tostring原方法当我们把表当作字符串来使用的时候调用此方法
__tostring=function(mytable)
local str=""
for k,v in pairs(mytable) do
str=str..v..","
end
return str
end
__call原方法当我们把表当作函数来调用的时候默认使用__call原方法
__call=function(tab,arg)
print(arg)
return siki
end
__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
__newindex跟__index一样后面既可以跟方法,也可以跟表
当我们给表中添加新的键值对的时候调用__newIndex方法
有了__newindex方法后他不会自动添加进去,只会调用这个方法,如果我们想要将数据添加进去的话需要用到rawset方法
原表中存在的__metatable的键值对的话,setmetatable会失败。
__metatable可以用来保护元表
元表中的__index方法的作用是:
当我们访问表中不存在的key值的时候就会默认调用元表中的__index方法。__index可以是一个方法,也可以是一张表。
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()
print(#xx)
#可以取得字符串的长度,也可以取得表格的长度。
//定义全局变量
不需要数据类型,定义的所有变量都是全局的
//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()