Lua程序设计(三)面向对象实现一个简单的类
1.Lua面向对象实现步骤
①创建一个全局表(称之为元表)
②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法)__index 赋值其实是一个function的语法糖,Sharp.__index = Sharp等价于Sharp.__index = function(key) return Sharp[key] end
③新建一个表,使用setmetatable方法将元表设置到这个新表中,那这个新表就能以对象的方式来调用对应的属性和方法了,当这个对象调用属性或者函数时,首先查找自身的元表,如果找到则返回;如果没找到,则检查元表中是否有__index,如果有,则使用__index的值继续查找,直到没有__index为止。
2.例子
①代码
Sharp = { _val = 1} --① 父类function Sharp:new()local new_sharp = { }self.__index = self --②,self == Sharpsetmetatable(new_sharp, self) --③return new_sharp endfunction Sharp:sharp_func()print("Sharp call sharp_func") endfunction Sharp:name()print("Sharp call name") endfunction Sharp:val()print(string.format("Sharp call val %d", self._val)) end
②调用代码
local sharp = Sharp:new() sharp:sharp_func() sharp:name() sharp:val()
③输出结果
3.自己写一个类
class1.lua
local ok, new_tab = pcall(require, "table.new") if not ok or type(new_tab) ~= "function" thennew_tab = function (narr, nrec) return {} end endlocal _M = new_tab(0, 54) --① 父类_M._VERSION = '0.01'function _M:new()local new_obj = {}self.__index = self --②,self == _Msetmetatable(new_obj, self)return new_obj end-- 定义个简单的方法 function _M:func()print("Function func ") endreturn _M
简单的调用
local class01 = require "class1" print("_VERSION == "..class01._VERSION) local func = class01:func() print(func)
打印结果
_VERSION == 0.01 Function func nil
Lua程序设计(三)面向对象实现一个简单的类相关推荐
- hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存
hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存 前面我们已经提及过hibernate内部为二级缓存的扩展做了很多的实现.我们只需要实现RegionFactoryTem ...
- 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS
Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- 小灰灰的APP学习之路(三)--创建一个简单的问答选择项目
创建一个简单的问答选择项目 简介 这是一个简单的问答选择项目,界面上显示问题,然后点击"正确"或"错误"按钮,系统给出是否回答正确的提示. 例如: 问题:1+1 ...
- 面向对象写一个简单的学生管理系统
package com.xuesheng; //使用面向对象编写一个学生管理系统. //1.学生类属性有:姓名.性别.年龄.班级:学生可以自由选科: //3.在测试类中实例化学生对象,并打印每个学生选 ...
- JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...
- HTML5.0实例练习(三) --制作一个简单登陆界面
今天分享一个简单的实例--制作一个简单登陆界面 代码如下: 代码执行结果如下: 这里面用到了<table><th><td><tr>这些表格标签,这些在这 ...
- VIPLE初学者日记(三)实现一个简单定时器
目标 做一个简单的定时器,实现语音报数从0数到99. 实现过程 如下图: 结果 语音报数 0.1.2.3-99,数一百个数,到99后,语音输出 all done.
- 新建maven写页面_使用 IDEA 创建 Maven Web 项目 (三)- 编写一个简单的 WEB 应用
编写 Servlet 类 首先,需要在 java 目录下,创建一个名为 org.smart4j.chapter1 的包.然后,在该包下创建一个 HelloServlet 的类,代码如下: packa ...
- Java基础篇:一个简单的类
让我们先从一个简单的例子来开始对类的研究.下面定义了一个名为box的类,它定义了3个实例变量:width,height和depth.当前,box类不包含任何方法(但是随后将增加一些). class B ...
最新文章
- 论文《一种金融市场预测的深度学习模型: FEPA》(4)----金融市场预测的架构--常见的数据降为方法
- 常年霸榜 Amazon 数据结构与算法领域 TOP3
- 观察者模式--初学入门
- MATLAB读取excel文件中的数据
- 纪念品分组pascal程序
- Java笔记(基础第二篇)
- C++STL之string (转)
- 反模式设计_设计模式:模式或反模式,这就是问题
- Ubuntu14.04中踩过的坑
- C语言中的多字节字符与宽字符
- 理解密码学中的双线性映射
- Hough变换——检测直线
- JAVA超市综合管理信息区块链系统毕设论文
- matlab分析系统灵敏度,matlab灵敏度分析函数
- 电脑桌面的计算机图标都不见了,如何解决电脑桌面的图标都不见了的问题
- Python 唤起QQ对话框 QQ客服效果
- Flask-Caching使用redis缓存后端加速页面重载
- Python实现psf2otf
- OpenGLES2.0渲图步骤:绘几何图形、图片处理、离屏渲染(3)
- 忆享科技聚焦|数字中国发展报告、政务云市场规模、网络安全、中小企业数字化……近期热点资讯一览