Lua基础复习之Lua元表

## 今天复习下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()  -- 调用对象的方法
相关推荐
xiaoye-duck2 分钟前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
总要学点什么1 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
田甲1 小时前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
严肃小白兔2 小时前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
Funlang3 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人63 小时前
PHP文件读写完全指南
开发语言·php·1024程序员节
坤坤子吖4 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢5 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚6 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl