Lua 实现继承的一种方式

server/2024/11/25 1:29:12/

以下代码来自Loxodon Framework,截取自其中的一段

lua">function class(classname, super)local cls = {}cls.__classname = classnamecls.__class = clscls.base = function (self)return cls.superendcls.__type = 0cls.super = supercls.__index = clsif super thensetmetatable(cls,{__index = super, __call = function (t,...)local instance = setmetatable({},t)  instance:ctor(...)return instanceend})elsecls.ctor = function (...)endsetmetatable(cls,{__call = function (t,...)local instance = setmetatable({},t)instance:ctor(...)return instanceend})endif not cls.ctor thencls.ctor = function (...)   --构造函数endendreturn cls
end

调用方式

lua">local t = {1,2,3}
t.age = 10local a = class("a",t)
print(a.age)  --输出10local b = a()   --调用了__call元方法,相当于是构造函数
print(b.age)  --输出10

当调用a.age时,a相当于cls,会从__index中寻找age,即super,也就是t中寻找
而当通过local b = a() 的方式调用时,会进入到__call元方法中,instance 会从cls继承,相当于把cls设置为了instance的元表,最终返回instance


http://www.ppmy.cn/server/144671.html

相关文章

LLM-Pruner: On the Structural Pruningof Large Language Models

机翻,自己方便对着原文看的 Abstract 大型语言模型(llm)在语言理解和生成方面表现出了显著的能力。然而,这种令人印象深刻的能力通常伴随着相当大的模型大小,这在部署、推理和训练阶段都提出了重大的挑战。由于LLM是…

【汽车制动】汽车制动相关控制系统

目录 1.ABS (Anti-lock Brake System,防抱死制动系统) 2.EBD(Electronic Brake-force Distribution,电子制动力分配系统) 3.TCS(Traction Control System,牵引力控制系统) 4.VDC&#xff08…

Vulnhub靶场 Jangow: 1.0.1 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 命令执行2. 反弹shell3. 提权4. 补充4.1 其他思路4.2 问题 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 介绍: Difficulty: easy…

全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算

主线程遍历得到的 DOM 树,依次为树中的每个节点计算出它最终的样式,称之为 Computed Style。 通过前面生成的DOM 树和 CSSOM 树,遍历 DOM 树,为每一个 DOM 节点,计算它的所有 CSS 属性,最后会得到一棵带有…

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时,训练损失异常大 问题分析 问题 training_loss异常大,在二分类损失中,收敛在1~2附近,而eval_loss却正常(小于0.5) 分析 参考: Bug in gradient accumulation…

【PCIE常见面试问题-1】

PCIE常见面试问题-1 1 PCIE概述1.1 PCI为何发展开PCIE?1.2 什么是Root Complex(RC)1.3 什么是EP?1.4 什么是Swith1.5 PCIE协议如何组织通信的?1.6 简要介绍一下PCIE的分层结构,为什么需要分层?1.7 PCIE的事务类型有哪些…

微软 Ignite 2024 大会

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

金融科技白皮书:2022-2023年度回顾与前瞻

在金融科技领域,2022至2023年见证了一系列创新技术的应用和发展。本白皮书将回顾过去一年的主要成就,并展望未来一年的发展趋势。 2022年亮点回顾 **低代码平台:**低代码平台通过高度抽象化和自动化的可视化过程,简化了应用程序开…