## 今天复习下lua知识点 元表是Lua中重要的模块,它使得表与表之间得以交互,如使用__add元方法即可表与表之间进行交互。 当然,如果我们想利用Lua去模拟面向对象,元表也是其关键的实现方式。
__index: 当表中没有这个数据时,通过__index指向的表中获取数据;
__newindex:当表中没有所需要访问的数据时,在__newindex中访问该方法;
__add(a, b) -- 对应 + 运算
__sub(a, b) -- 对应 - 运算
__mul(a, b) -- 对应 * 运算
__div(a, b) -- 对应 / 运算
__mod(a, b) -- 对应 % 运算
__pow(a, b) -- 对应 ^ 运算
__unm(a) -- 对应 - (取负)运算
__eq(a, b) -- 对应 == 运算
__lt(a, b) -- 对应 < 运算
__le(a, b) -- 对应 <= 运算
rawget:绕过__index直接获取当前表中的数据,如果没有则返回nil;
rawset:绕过__newindex直接访问当前表中的数据,如果没有则直接在当前表中创建;
Lua 是一种轻量级的脚本语言,虽然它不像 Java 或 C++ 那样内置强大的面向对象(OO)特性,但它非常灵活,可以通过一些技巧实现面向对象编程。
Lua 中的类可以通过 table + function 模拟出来。
在 Lua 中,最基本的结构是 table,我们可以使用表(table)来创建对象。
ClassName = {} -- 创建一个表作为类
通过 new 方法(或其他名称)创建对象,并初始化对象的属性。
function ClassName:new(...)
local obj = {} -- 创建一个新的空表作为对象
setmetatable(obj, self) -- 设置元表,使对象继承类的方法
self.__index = self -- 设置索引元方法
-- 初始化对象的属性
obj:init(...) -- 可选:调用初始化函数
return obj
end
表(table)是 Lua 中最基本的复合数据类型,可以用来表示对象的属性。
Lua 中的 function 可以用来表示方法:
function ClassName:sayHello()
print("Hello, my name is " .. self.name)
end
使用 new 方法来创建对象,并通过对象调用类的方法。
local obj = ClassName:new("Alice") -- 创建对象
obj:sayHello() -- 调用对象的方法