Lua程序设计(一)面向对象概念介绍
完整代码
local mt = {} mt.__add = function(t1,t2) print("两个Table 相加的时候会调用我") end local t1 = {} local t2 = {} -- 给两个table 设置新的元表,一个元表就是一个table的值 setmetatable(t1,mt) -- meta:元素 setmetatable(t2,mt) -- 进行相加操作 local t = t1 + t2 print(t) --[[输出结果 两个Table 相加的时候会调用我 nil --]]
完整代码
-- 创建一个元表 (是创建一个类吗?) local mt = {} mt.__add = function(s1, s2) local result = "" if s1.sex == "boy" and s2.sex == "girl" then result = "一个男孩和一个女孩的家庭" elseif s1.sex == "girl" and s2.sex == "girl" then result = "两个女孩的家庭" else result = "未知孩子的家庭" end return result end -- 创建两个table,可以想象成是两个类的对象(实例化两个类) local s1 = { name = "Per1", sex = "boy" } local s2 = { name = "Per2", sex = "girl" } -- 给两个table 设置新的元表,一个元表就是一个table的值 setmetatable(s1, mt) setmetatable(s2, mt) -- 进行加法操作 local result = s1 + s2 print(result) -- 一个男孩和一个女孩的家庭
----------------------------------------------------------- Lua面向对象2 local t = { name = "Tinywan" } local mt = { __index = function(table,key) print("虽然你调用了我不存在的字段和方法,不过没关系,我能检测出来"..key) end } setmetatable(t,mt) print(t.name) print(t.age)
--[[输出结果 Tinywan 虽然你调用了我不存在的字段和方法,不过没关系,我能检测出来age nil --]]
----------------------------------------------------------- Lua面向对象2 local t = { name = "Tinywan" } local mt = { money = 808080 } mt.__index = mt setmetatable(t,mt) print(t.money) -- 输出结果 808080
----------------------------------------------------------- Lua面向对象2 local t = { name = "Tinywan" } local mt = { __index = { money = 909090 } } setmetatable(t,mt) print(t.money) -- 输出结果 909090
----------------------------------------------------------- Lua面向对象2 local smartMan = { name = "Tinywan", age = 26, money = 800000, say_fun = function() print("Tinywan say 大家好") end } local t1 = {} local t2 = {} local mt = { __index = smartMan } -- __index 可以是一个函数,也可以是一个函数 setmetatable(t1, mt) setmetatable(t2, mt) print(t1.money) t2.say_fun() --- 输出结果 -- 800000 -- Tinywan say 大家好
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· C# 深度学习框架 TorchSharp 原生训练模型和图像识别
· 这或许是全网最全的 DeepSeek 使用指南,95% 的人都不知道的使用技巧(建议收藏)
· 拒绝繁忙!免费使用 deepseek-r1:671B 参数满血模型
· 本地搭建DeepSeek和知识库 Dify做智能体Agent(推荐)
· Sdcb Chats 重磅更新:深度集成 DeepSeek-R1,思维链让 AI 更透明!
· DeepSeek-R1本地部署如何选择适合你的版本?看这里