Lua程序设计(三)面向对象实现一个简单的类
1.Lua面向对象实现步骤
①创建一个全局表(称之为元表)
②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法)__index 赋值其实是一个function的语法糖,Sharp.__index = Sharp等价于Sharp.__index = function(key) return Sharp[key] end
③新建一个表,使用setmetatable方法将元表设置到这个新表中,那这个新表就能以对象的方式来调用对应的属性和方法了,当这个对象调用属性或者函数时,首先查找自身的元表,如果找到则返回;如果没找到,则检查元表中是否有__index,如果有,则使用__index的值继续查找,直到没有__index为止。
2.例子
①代码
Sharp = { _val = 1} --① 父类
function Sharp:new()
local new_sharp = { }
self.__index = self --②,self == Sharp
setmetatable(new_sharp, self) --③
return new_sharp
end
function Sharp:sharp_func()
print("Sharp call sharp_func")
end
function Sharp:name()
print("Sharp call name")
end
function Sharp:val()
print(string.format("Sharp call val %d", self._val))
end
②调用代码
local sharp = Sharp:new()
sharp:sharp_func()
sharp:name()
sharp:val()
③输出结果
3.自己写一个类
class1.lua
local ok, new_tab = pcall(require, "table.new")
if not ok or type(new_tab) ~= "function" then
new_tab = function (narr, nrec) return {} end
end
local _M = new_tab(0, 54) --① 父类
_M._VERSION = '0.01'
function _M:new()
local new_obj = {}
self.__index = self --②,self == _M
setmetatable(new_obj, self)
return new_obj
end
-- 定义个简单的方法
function _M:func()
print("Function func ")
end
return _M
简单的调用
local class01 = require "class1"
print("_VERSION == "..class01._VERSION)
local func = class01:func()
print(func)
打印结果
_VERSION == 0.01
Function func
nil
分类:
Lua/Perl/Python
标签:
lua
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)