Lua学习

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 元方法用于修改表的输出行为,自定义了表的输出内容。

你可能感兴趣的:(lua,开发语言)