热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解说Lua中的面向对象

面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程。在Lua中,并没有面向对象的概念存在

面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程。在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承。

一、复制表的方式面向对象

–Lua中的面向对象

–[[

复制表方式面向对象

参数为一张表,通过遍历这张表取值,赋给一张空表,最后返回新建的表,来达到克隆表

]]

function clone(tab)

local ins = {}

for key, var in pairs(tab) do

ins[key] = var

end

return ins

end

–[[

复制表

第一参数是目标表,第二个参数是需要复制的表

通过遍历tab来取值将它赋值到目标表中

]]

function copy(dist,tab)

for key, var in pairs(tab) do

dist[key] = var

end

end

— 定义一张空表,相当于一个类

People ={}

–function People.sayHi()

— print(“People say hi”)

–end

— 定义类中的方法sayHi,传入一个self参数

People.sayHi = function (self)

print(“People say hi:”..self.name)

end

— 定义一个new方法,传进一个name参数,通过克隆People这张表来生成一个对象

— 相当于类当中的一个构造方法

People.new = function (name)

local self = clone(People)

self.name = name

return self

end

–local p = clone(People)

–p.sayHi()

–生成一个新的对象

local p = People.new(“ZhangSan”)

–p.sayHi(p)

–p:sayHi()

–定义一张空表,也代表一个类

Man = {}

–Man中的构造方法,实现Lua中类的继承

Man.new = function (name)

local self = People.new(name)

–附加Man中所有的键值对到People中的实例中去

copy(self,Man)

return self

end

Man.sayHello = function ()

print(“Man say hello”)

end

–重写父类People中的sayHi方法

Man.sayHi = function (self)

print(“Man sayHi “..self.name)

end

–创建Man的一个实例

local m = Man.new(“Lisi”)

m:sayHi()

二、使用函数闭包的形式实现面向对象

–以函数闭包的形式实现面向对象

–定义一个方法,函数闭包实现一个类的概念

function People(name)

local self = {}

–初始化方法,私有的

local function init()

self.name = name

end

self.sayHi = function ()

print(“Hello “..self.name)

end

–调用初始化

init()

return self

end

–实例化一个对象

local p = People(“ZhangSan”)

p:sayHi()

–函数闭包的形式实现类继承

function Man(name)

local self = People(name)

— local function init()

— end

self.sayHello = function ()

print(“Hi “..self.name)

end

return self

end

local m = Man(“Lisi”)

–m:sayHello()

m:sayHi()


推荐阅读
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文详细介绍了在使用EmguCV进行图像处理时常用的函数及其应用场景,旨在帮助开发者更好地理解和利用这些工具。 ... [详细]
  • Java Set集合源码深度解析
    本文将深入探讨Java集合框架中的Set接口及其主要实现类HashSet、LinkedHashSet和TreeSet的源码实现,帮助读者理解这些集合类的工作原理及应用场景。 ... [详细]
  • 重构:优化现有代码设计(第二版)笔记
    本文介绍了重构的基本概念,通过具体示例展示了如何提炼函数以处理过长的代码段,并探讨了多种重构技术,如分阶段重构、封装变量等。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • 本文详细解析了Java编程语言中的浅克隆和深克隆概念,通过实例代码演示了两者的区别与应用场景,帮助开发者更好地理解和使用对象克隆技术。 ... [详细]
author-avatar
社会逼我爱上Money_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有