table(表):
--初始化表
mytable={}
--指定值
mytable[1]="Lua"
--移除引用
mytable=nil
模块与包——相当于类 :
模块:变量、函数等组成。
--定义名为 module 的模块
module={}
--定义常量
module.constant="这是一个变量"
--定义函数
function module.func1()
io.write("这是一个私有函数!")
end
local function.func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module
加载模块
require("<模块名>") 或 require "<模块名>"
require("module")
print(module.constant)
module.func3()
local m=require("module")
print(m.constant)
m.func3()
Metatable(元表)
setmetatable()
mytable={} --普通表
mymetatable={} --元表
setmetatable(mytable,mymetatable) --把mymetatable设为mytable的元素
mytable=setmetatable({},{})
__index元方法
Lua在查找一个表元素时,如下三个步骤
1、在表中查找,如果找到,返回该元素,找不到则继续。
2、判断该表是否有元表,如果没有元表,返回nil,有则继续。
3、判断元表有没有_index方法,如果_index方法为nil,则返回nil;如果_index方法是一个表,则重复1、2、3;如果_index方法是一个函数,则返回该函数的返回值。
__newindex元方法
mymetatable = {}
mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable })
print(mytable.key1)
mytable.newkey = "新值2"
print(mytable.newkey,mymetatable.newkey)
mytable.key1 = "新值1"
print(mytable.key1,mymetatable.key1)
结果:
value1 nil 新值2 新值1 nil
_newindex元方法用来对表更新,_index用来对表访问。
在对新索引键赋值时,会调用元方法,而不进行赋值。
如果对已存在的索引键盘赋值,则会直接进行赋值,而不调用元方法_newindex
表的操作符
__add:"+"
__sub:"-"
__mul:"*"
__div:"/"
__mod:'%'
__eq:'=='
__lt:'<'
__le:'<='
__call 元方法
__call 元方法在 Lua 调用一个值时调用。以下实例演示了计算表中元素的和
__tostring 元方法
__tostring 元方法用于修改表的输出行为,自定义了表的输出内容。