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

这篇具有很好参考价值的文章主要介绍了Lua学习笔记:面向对象的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言
本篇在讲什么

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

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

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

本篇的特色

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

Lua学习笔记:面向对象的实现,lua学习笔记,lua,学习,笔记
★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


♠ 前言

本章节了解一下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学习笔记:面向对象的实现,lua学习笔记,lua,学习,笔记

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


♠ 继承

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

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

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

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

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

将表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())

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

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


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。文章来源地址https://www.toymoban.com/news/detail-543063.html

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

到了这里,关于Lua学习笔记:面向对象的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Lua:面向对象/C之间的交互

    前段时间对平台的任务感兴趣,其要求是一周内12篇博文,尝试了之后发现还是太敷衍了,之后还是回归到内容本身上来,尽量保证一篇博文的内容能涵盖足够多的知识点或者足够深的思考成分。 面向对象主要有三个方面:封装、继承和多态。Lua若做到了这三点,则认为是也

    2024年02月20日
    浏览(23)
  • Lua学习笔记:浅谈table的实现

    前言 本篇在讲什么 Lua中的table的实现 本篇适合什么 适合 初学Lua 的小白 本篇需要什么 对 Lua 语法有简单认知 依赖 Sublime Text 编辑器 本篇的特色 具有全流程的 图文教学 重实践,轻理论,快速上手 提供全流程的 源码 内容 ★提高阅读体验★ 👉 ♣ 三级标题 👈 👉 ♦ 四级标

    2024年02月12日
    浏览(30)
  • 【Lua学习笔记】Lua入门

    (不是教程,推荐有编程基础的人观看本文) 文中主要包含了对菜鸟教程中的一些学习理解,个人感觉Lua语言和Python很多地方相似 以下大部分代码和表格摘抄自菜鸟教程 数据类型 描述 nil 只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)(类似与Null或者

    2024年02月15日
    浏览(29)
  • 【Lua学习笔记】Lua进阶——协程

    协程是一种并发操作,相比于线程,线程在执行时往往是并行的,并且线程在创建销毁执行时极其消耗资源,并且过长的执行时间会造成主进程阻塞。而协程可以以并发时轮值时间片来执行,优点是不会阻塞,消耗资源少,可以手动控制。至于协程和线程的区别,什么是并发

    2024年02月15日
    浏览(82)
  • 【Lua学习笔记】Lua进阶——函数和闭包

    使用函数嵌套的用法,我们可以将另一个函数作为返回值,但是返回函数作为一个值是要被赋值给其他变量的,所以return时不能起名(赋值)为其他变量名。 推荐阅读深入Lua:函数和闭包 在函数嵌套中,我们需要接触一个叫做闭包的概念 这就是一个闭包,它由一个函数和该

    2024年02月15日
    浏览(41)
  • 【Lua学习笔记】Lua进阶——Table(3) 元表

    接上文 Q:为什么要使用元表? A:在Lua中,常常会需要表与表之间的操作。元表中提供了一些元方法,通过自定义元方法可以实现想要的功能,相当于面向对象中给你一系列方法让你重载。 使用下列代码设置元表: 通常在元表中操作分为三步: 操作子表 检测是否有元表 若

    2024年02月15日
    浏览(25)
  • 【Lua学习笔记】Lua进阶——Table,迭代器

    在【Lua学习笔记】Lua入门中我们讲到了Lua的一些入门知识点,本文将补充Lua的一些进阶知识 在上篇文章的最后,我们指出通过查询_G的字符索引,发现table.insert实际上是一个名为table的table结构里的索引指向的函数 实际上不仅它,所有的函数,模块,全局变量,元表 😅😅😅

    2024年02月15日
    浏览(28)
  • 【Lua学习笔记】Lua进阶——Require,三目运算

    这是文件 aaa.lua 的内容 这是文件 example.lua 的内容 可以看到,在使用require之后,会直接对其他文件进行调用执行。而且我们可以直接访问它的全局变量,并且发现我们的全局变量被覆盖了,而它的局部变量就像private一样,不能被这个文件访问。 从 package.loaded 这个方法我们可

    2024年02月15日
    浏览(31)
  • 【Lua学习笔记】Lua进阶——Table(4)继承,封装,多态

    现在我们可以像面向对象一样,new一个对应基类的对象了。但是这里的new也不完全相似与面向对象的new,例如我们可以这样做: 我们在封装Object类的时候可完全没有name这个索引,而在Lua中我们new了一个新对象,还能新加入一些变量和方法,这些特性明显是继承了父类的子类才

    2024年02月15日
    浏览(35)
  • lua学习笔记21完结篇(lua中的垃圾回收)

    输出 学习地址  【唐老狮】Unity热更新之Lua语法_哔哩哔哩_bilibili 

    2024年04月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包