Lua实现面向对象三大特性
面向对象是基于table实现的
封装
:(冒号) 自动将调用该函数的对象作为第一个参数传入
--Object就是第一参数
function Object:new()
self:代表默认传入的第一个参数
_index:当自己的变量中找不到时,会默认找原表中_index指向的内容
Object = {}
Object.id = 1function Object:new()local obj = {}--找不到变量时,默认找Object中的变量self._index = self--设置原表为Objectsetmetatable(obj,self)return obj
end
local myObj = Object:new()
print(myObj.id)
继承
_G总表:所有声明的全局变量,都以键值对的形式存在在其中
思路:
1.继承的对象声明一张_G表
2.将其设置为父对象的子表
function Object:subClass(className)_G[className] = {}local obj = _G[className]self._index = selfsetmetatable(obj,self)
endObject:subClass("Person")
local p1 = Person:new()
print(p1.id)
多态
function Object:subClass(className)--根据名字生成一张表 就是一个类_G[className] = {}local obj = _G[className]--设置自己的“父类”obj.base = self--给子类设置元表 以及 __indexself.__index = selfsetmetatable(obj, self)
end--申明一个新的类
Object:subClass("GameObject")
--成员变量
GameObject.posX = 0
GameObject.posY = 0
--成员方法
function GameObject:Move()self.posX = self.posX + 1self.posY = self.posY + 1
end--实例化对象使用
local obj = GameObject:new()
print(obj.posX)
obj:Move()
print(obj.posX)local obj2 = GameObject:new()
print(obj2.posX)
obj2:Move()
print(obj2.posX)--申明一个新的类 Player 继承 GameObject
GameObject:subClass("Player")
--多态 重写了 GameObject的Move方法
function Player:Move()--base调用父类方法 用.自己传第一个参数self.base.Move(self)
end
print("****")
--实例化Player对象
local p1 = Player:new()
print(p1.posX)
p1:Move()
print(p1.posX)local p2 = Player:new()
print(p2.posX)
p2:Move()
print(p2.posX)
相关文章:
Lua实现面向对象三大特性
面向对象是基于table实现的 封装 :(冒号) 自动将调用该函数的对象作为第一个参数传入 --Object就是第一参数 function Object:new() self:代表默认传入的第一个参数 _index:当自己的变量中找不到时,会默认找原表中_index指向的内容 Obj…...
竞赛python区块链实现 - proof of work工作量证明共识算法
文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…...
C#结合JavaScript实现上传视频到腾讯云点播平台
目录 需求 关键代码 界面元素布局 C# 实现服务端的签名类 上传视频的JS实现 视频演示 小结 需求 在云培训系统里,制作视频课件是我们的主要工作之一,制作完成后如果将这些素材存储到服务器并进行分发播放,是摆在我们面前的一个问题。…...
简单介绍一下js中的构造函数、原型对象prototype、对象原型__proto__、原型链
构造函数 function Star (uname, age){this.uname unamethis.age agethis.sing function(){ log(唱歌~) }}let xzq new Star(薛之谦, 30)let ldh new Star(刘德华, 20)log(ldh) // { uname: 刘德华, age: 20, sing: f }ldh.sing() // 唱歌~log(ldh.sing xzq.sing) // fal…...
Java基于springboot+vue开发服装商城小程序
演示视频: 小程序 https://www.bilibili.com/video/BV1rM411o7m4/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1fc411D7V3/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae…...
设计模式之十二:复合模式
模式通常被一起使用,并被组合在同一个解决方案中。 复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。 首先重新构建鸭子模拟器: package headfirst.designpatterns.combining.ducks;public interface Quackable …...
java通过年月获取当前月所有周(跨月),获取每周开始日期和结束日期
/*** 根据年月返回本月共几周,每周开始与结束日期*/public static List<Map<String, String>> queryWeek(String year, String month) throws ParseException {/** 周 **/final String[] weeks { "第一周", "第二周", "第…...
9.3 Windows驱动开发:内核解析PE结构节表
在笔者上一篇文章《内核解析PE结构导出表》介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中LyShark封装实现了KernelMapFile()内存映…...
Zephyr:Direct Distillation of LM Alignment
Zephyr:Direct Distillation ofLM Alignment IntroductionMethod Introduction dSFT已经被可以提升模型的指令遵循能力的准确性,但是student model 不会超过 teacher model。 作者认为 dSFT虽然可以让模型更好的理解用户意图,但是无法与人类…...
二叉树--算法题总结
1、利用层序遍历的产生的字符串来创建二叉树 /*** 使用层序遍历的字符串创建二叉树* param treeInfo* return*/public static TreeNode generateTreeNodeSecond(String treeInfo) {LinkedList<TreeNode> treeNodeLinkedList new LinkedList<>();if(StringUtils.is…...
PyQt6 QLabel标签控件
锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计21条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…...
即时通讯技术文集(第24期):音视频WebRTC好文合集 [共20篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 24 期。 [- 1 -] 开源实时音视频技术WebRTC的现状 [链接] http://www.52im.net/article-126-1.html [摘要] 作为Google开源的技术,WebRTC并不…...
HTML+CSS+JS网页设计与制作摄影类个人网页
可以使用网页三剑客htmlcssjs实现网页设计与制作,页面排版布局高端大气。 使用HTMLCSS页面布局设计,HTMLCSSJS网页设计与制作摄影类个人网页,这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺,突破与创新的理念…...
U-boot(五):启动内核
本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…...
tp8 使用rabbitMQ(2)工作队列
代码的参数说明在 第一小节的代码中,如果需要可移步到第一节中查看 工作队列 工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源、时间的操作。当我们把任务(Task)当作消息发送到队列…...
ZKP11.4 Use CI to instantiate Fiat-Shamir
ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.4 Use CI to instantiate Fiat-Shamir Avoid Bad Challenges Def: Given false claim x x x and a first message α \alpha α, a challenge β \beta …...
华为云编译构建CodeArts Build常见问答汇总
1.【Build】公有云编译构建是否支持导入外部机器做执行机 答:参考链接:https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0017.html • 使用代理机功能,需要配备1台4U8G或以上规格、磁盘>80GB的主机。 • 安装代理的…...
009 OpenCV 二值化 threshold
一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在机器视觉应用中,OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理,以此大幅降低图像的数…...
基于python的NBA球员数据可视化分析的设计与实现
完整下载:基于python的NBA球员数据可视化分析的设计与实现.docx 基于python的NBA球员数据可视化分析的设计与实现 Design and Implementation of NBA Player Data Visualization Analysis based on Python 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 …...
《使用Python将Excel数据批量写入MongoDB数据库》
在数据分析及处理过程中,我们经常需要将数据写入数据库。而MongoDB作为一种NoSQL数据库,其具有强大的可扩展性、高性能以及支持复杂查询等特性,广泛用于大规模数据存储和分析。在这篇文章中,我们将使用Python编写一个将Excel数据批…...
Win11与Ubuntu22.04 LTS双系统安装避坑指南(附分区优化建议)
1. 双系统安装前的准备工作 第一次尝试在Win11上安装Ubuntu22.04 LTS时,我犯了个低级错误——只给根目录分配了30G空间。结果安装CUDA时直接爆满,不得不重装整个系统。这个惨痛教训让我意识到,分区规划是双系统安装中最容易被忽视却最关键的一…...
Conda报错‘Malformed version string’别慌,三步搞定.condarc配置(附清华/阿里云源)
Conda报错‘Malformed version string’深度解析与实战修复指南 遇到Conda报错"Malformed version string"时,很多开发者第一反应是重装环境或切换Python版本。实际上,90%的此类问题源于.condarc配置文件中的版本号格式或镜像源配置错误。本文…...
IEEE IoT-J | CoDrone:Depth Anything V2+VLM云边端协同,无人机自主导航飞行距离+40%
导读:———————————————————————————————————————————无人机自主导航面临一个两难困境:板载浅层DNN感知能力有限,遇到复杂环境容易碰撞;将计算卸载到边缘服务器又受网络波动影响&#x…...
镜像优化攻略
镜像优化攻略:提升效率与性能的关键 在云计算和容器化技术快速发展的今天,镜像作为应用部署的核心载体,其优化直接关系到资源利用率、启动速度和系统稳定性。无论是开发、测试还是生产环境,高效的镜像优化策略都能显著降低成本并…...
ELi_MdM_4_00电机驱动库:工业嵌入式多模式PWM控制框架
1. ELi_MdM_4_00 电机驱动库深度解析:面向工业级嵌入式控制的多模式驱动框架ELi_MdM_4_00 是 E-LAGORi 公司推出的第四代电机驱动模块专用固件库,专为嵌入式系统对多类型执行机构的精确、可靠、低开销控制而设计。该库并非通用型电机控制抽象层ÿ…...
我为什么开始安利 Hermes Agent:它和 OpenClaw 到底有什么不一样?
如果你最近在折腾 AI Agent,大概率已经见过一堆“能聊天、能调工具、能接 Telegram/Discord”的项目了。问题不在于有没有,而在于:哪个真的值得长期用,哪个只是演示时很猛,落地时很折磨。 这两天我认真装了一遍 Herme…...
OpenFGA错误排查终极指南:从入门到精通的常见问题与解决方案汇总
OpenFGA错误排查终极指南:从入门到精通的常见问题与解决方案汇总 【免费下载链接】openfga A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar 项目地址: https://gitcode.com/gh_mirrors/…...
【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---GUI-MCP 整体架构挚
前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...
大模型工程化容灾落地难?揭秘头部AI公司正在用的5级备份分级策略与自动故障注入验证法
第一章:大模型工程化容灾备份方案设计 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化过程中,模型权重、训练检查点、推理缓存及元数据的高可用性与一致性是系统稳定运行的核心前提。容灾备份不能仅依赖传统周期快照,而需融合多…...
算法的时间和空间复杂度
1算法效率主要取决于时间和空间,一般从时间和空间衡量一个算法的好坏2时间复杂度算法的时间复杂度是一个函数,算法基本的执行次数,为算法的时间复杂度。对于时间复杂度的计算,我们采用大O的渐进表示法。大O渐进表示法1用常数1取代…...
