Lua学习笔记:面向对象的实现

news2024/11/27 12:44:56
前言
本篇在讲什么

Lua中的面向对象的实现
本篇适合什么

适合初学Lua的小白
本篇需要什么

Lua语法有简单认知
依赖Sublime Text编辑器

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


目录

  • ♠ 前言
  • ♠ 表的特性
  • ♠ 继承
  • ♠ 类
  • ♠ 推送
  • ♠ 结语


♠ 前言

本章节了解一下Lua如何实现面向对象编程


♠ 表的特性

首先我们需要知道,Lua的表是关键,Lua面向对象编程基本上是基于表的特性来实现的

如果你对表还不太了解,建议先过一遍Lua的类型和基本语法

菜鸟教程:Lua table

我们知道Lua表的键值可以是除了nil的任意类型,如此,我们可以为其设置函数,如下所示

-- 学生
Student = {}

-- 获取分数
Student.getGrade = function()
    return 0 
end

我们声明了一个名为Student的全局表
我们为表添加属性getGrade,并为其付了一个方法
可以通过Student.getGrade()来调用方法,获取学生分数
方法的定义还可以以下的方式,二者没有本质区别

-- 获取分数
function Student.getGrade()
    return 0 
end

-- 获取分数
function Student:getGrade()
    return 0 
end

上述代码设计到一点Lua语法糖的内容,可以参考之前文章

Lua学习笔记之“.”和“:”的作用和用法

为此又有一个比较重要的点self出现了,self是所有面向对象语言的核心点,Lua语言可以在方法体内代替表本身

在这里插入图片描述

上述对方法的定义,基本是就是我们平时比较熟悉的函数了,但是仅仅这些还是不够的


♠ 继承

首先我们了解在Lua中是如何实现继承的概念的

本模块用到了table的元表和元方法相关的内容,本篇不在累述,不熟悉的可以去参考之前的文章

lua:浅谈对元表和元方法的认识

了解元表,应该都对__index元方法有印象,设置了该元方法的表,在查询的时候会去调用__index元方法,这就满足了继承需要的功能,看下面例子

在这里插入图片描述

将表Student赋值给元表mt的__index方法
给表StudentA设置mt元表
调用StudentA.grade,StudentA没有,查Student


♠ 类

我们还需要考虑如何通过Lua去实现面向对象的几个特点,包括类体系、继承和私有性

我们稍微修剪一下代码,让结构变得更熟悉,一个简单的根据基类创建新类的过程我们就做好了

-- 学生
Student = {}

function Student:new(o)
    o = o or {}
    self.__index = self
    setmetatable(o, self)
    return o
end

function Student:printGrade()
    print("Student:5")
end

function Student:printAge()
    print("Student:18")
end

-- 小帅
StudentA = Student:new()

function StudentA:printGrade()
    print("StudentA:10")
end

print(StudentA:printGrade())
print(StudentA:printAge())


StudentB = StudentA:new()

function StudentB:printAge()
    print("StudentB:17")
end

print(StudentB:printGrade())
print(StudentB:printAge())

在这里插入图片描述

基类Student,根据基类延伸出的子类StudentA,根据子类延伸出的新子类Student,都可以对父类的方法进行重写,并且可以继承父类的方法和属性


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库基础(三):多表查询,子查询,开窗函数

十一、多表查询(重点、难点) 表与表之间的关系 在SQL语句中,数据表与数据表之间,如果存在关系,一般一共有3种情况: ① 一对一关系(高级) 比如有A、B两张表,A表中的每一…

多肽试剂:143120-27-8,Cyclo(-D-Tyr-Arg-Gly-Asp-Cys(carboxymethyl)-OH) sulfoxide

试剂基团反应特点(Reagent group reaction characteristics): 环肽试剂Cyclo(-D-Tyr-Arg-Gly-Asp-Cys(carboxymethyl)-OH) sulfoxide,陕西新研博美生物科技有限公司多肽合成、定制多肽、同位素标记肽、人工胰岛素、磷酸肽、生物素…

Python split()函数使用详解,Python分割字符串

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 split 1、不指定分隔符2、分隔符的类型3、指定分隔次数4、分隔的结果 split() 可…

你真的不想知道怎么用ai绘画图片生成图片吗?

亲爱的二次元迷们,你是否曾经梦想过能够画出自己心中的二次元角色,让他们跃然纸上、生动活泼地展现在世人面前?但是,面对空白的画板和一支笔,我们有时会感到无从下手,毫无艺术细胞可言。不要失望&#xff0…

Dlib —— 对视频流进行人脸识别(附C++部分源码、完整源码下载)

照片效果 视频效果 注意:Dlib检测人脸在Release版耗时与CPU有关,本人I7 10代约100ms左右,这里本人将人脸检测用Yolov5对人脸简单抠图训练后 使用yolov5推理检测人脸,之后将检测到的人脸输入给Dlib做特征,发现人脸特征部分耗时也较…

基础实验篇 | uORB消息读写与自定义实验(一)

导读 uORB是PX4/Pixhawk系统中非常重要且关键的模块之一,是用于无人机模块间通信的协议机制。本篇将详细介绍uORB并详细拆解uORB消息读写与自定义实验(一)。 基础实验篇 | uORB消息读写与自定义实验(一) ect Request Broker,微对…

7、动手学深度学习——卷积神经网络:基础部件+LeNet

1、图像卷积 1. 互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。在卷积层中,输入张量和核张量通过(互相关运算)产生输出张量。 首先…

python 中禁用 SettingWithCopyWarning

最近代码中出现了这个warn,但是我确信我已经把所有的df赋值都改成loc了,依旧会出现,只有把这个warn禁了。 import pandas as pd import warnings# 禁用 SettingWithCopyWarning 警告 warnings.filterwarnings("ignore", categorypd…

闲人闲谈PS之四十三——标准程序的陷阱

惯例闲话:7月,闲人家乡的水蜜桃成熟了,闲人很喜欢吃桃子,可惜经常出门在外,经常错过了水果最好的季节,这次委托家人邮寄了几箱,果然还是家乡的桃子好吃。回顾这几年,错过了不仅仅是水…

数据库sql 根据身份证计算年龄段mysql、oracle

数据库sql根据身份证计算年龄段 mysql: SELECTage,count(*) numFROM(SELECTCASEWHEN TIMESTAMPDIFF(YEAR,DATE(substring(id_card,7,8)),CURDATE())<35 THEN 35岁以下WHEN TIMESTAMPDIFF(YEAR,DATE(substring(id_card,7,8)),CURDATE()) > 35AND TIMESTAMPDIFF(YEAR,DATE…

deque容器语法

文章目录 deque容器deque容器基本概念功能&#xff1a;deque 的实现细节deque与vector底层区别&#xff1a; deque构造函数功能描述&#xff1a;函数原型&#xff1a; deque元素访问deque赋值操作功能描述&#xff1a;函数原型&#xff1a; deque大小操作功能描述&#xff1a;函…

哪些期货公司招居间人,期货居间人的红利期时代已过,该何去何从

2021年9月10日&#xff0c;中国期货业协会发布了关于发布《期货公司居间人管理办法 (试行)》的通知&#xff0c;《期货公司居间人管理办法(试行)》正式出台。 根据通知&#xff0c;期货公司仅能与经有关金融监管部门批准设立的证券公司等金融机构开展居间合作。现在的法人居间绝…

【stable-diffuision-webui】controlnet制作动漫二维码(丐版)

主要参考 原作者的博文&#xff1a;AI生成可扫码图像 — 新 ControlNet 模型展示 光照生成模型C站说明&#xff1a;https://civitai.com/models/80536/lighting-based-picture-control-controlnet 扩展阅读&#xff1a;https://aigc.ioclab.com/sd-showcase/light_controlnet.…

Sentieon | 每周文献-Agrigenomics-第四期

农业系列文章-1 标题&#xff08;英文&#xff09;&#xff1a;Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题&#xff08;中文&#xff09;&#xff1a;高粱驯化的基因组足迹和多种最终用途的育种选择发表期刊&#xff1a;《…

vue3中使用jsx

一、使用vue-cli创建的项目中使用jsx语法 安装Vue 3&#xff1a;使用Vue CLI创建一个新项目或通过npm安装Vue。 配置Vue JSX插件&#xff1a;在创建的项目中&#xff0c;找到 babel.config.js 文件&#xff0c;添加以下插件配置&#xff1a; module.exports {presets: [vue…

CentOS Linux MySQL 数据库 的安装方法

一、简单了解MySQL数据库的体系结构 &#xff08;一&#xff09;MySQL架构图 &#xff08;二&#xff09;MySQL体系结构&#xff1a;连接层、服务层、引擎层、存储层 1、连接层--主要职责&#xff1a;身份认证&#xff0c;连接管理&#xff0c;获取权限信息 &#xff08;1&am…

No11.精选前端面试题,享受每天的挑战和学习

文章目录 JS数组去重的几个方法讲下es6新增symbol 数据类型v-model原理是什么vue响应式原理vue中的data 为什么是个函数&#xff1f;前端有几种缓存方式 JS数组去重的几个方法 在JavaScript中&#xff0c;可以使用几种方法对数组进行去重&#xff1a; 使用Set&#xff1a;Set…

每日汇评:美联储会议纪要是否能确认黄金的看涨楔形?

1、在美国独立日清淡的交易中&#xff0c;黄金价格创下了一周以来的新高&#xff1b; 2、在美联储会议纪要之前&#xff0c;美元利用了对经济衰退的担忧和中美科技之争&#xff1b; 3、黄金需要日线收在1922美元上方才能确认看涨楔形&#xff0c;但看跌的RSI值得谨慎&#xf…

png转svg图片免费

svg免费转换网站 https://vectr.com/design/editor/c232c8cb-5eb8-4bae-b302-25cb94a8f737 操作步骤 1.上传png或者其他格式图片 2.点击导出文件 3.选择导出格式为svg和其他配置参数 4.打开下载好的svg图片 5.在编辑器中看svg图片

短视频矩阵系统源码自研+开发技术文档

一、短视频矩阵系统源码自研&#xff08;站在开发者交付分析&#xff09; 目录 一、短视频矩阵系统源码自研&#xff08;站在开发者交付分析&#xff09; 二、 短视频矩阵系统需要开发的前提语言框架技巧&#xff1a;NGINX&#xff0c;PHP7.4&#xff0c;MySQL5.7&#xff0…