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程序设计(三)面向对象实现一个简单的类相关推荐

  1. hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存

    hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存 前面我们已经提及过hibernate内部为二级缓存的扩展做了很多的实现.我们只需要实现RegionFactoryTem ...

  2. 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  3. 小灰灰的APP学习之路(三)--创建一个简单的问答选择项目

    创建一个简单的问答选择项目 简介 这是一个简单的问答选择项目,界面上显示问题,然后点击"正确"或"错误"按钮,系统给出是否回答正确的提示. 例如: 问题:1+1 ...

  4. 面向对象写一个简单的学生管理系统

    package com.xuesheng; //使用面向对象编写一个学生管理系统. //1.学生类属性有:姓名.性别.年龄.班级:学生可以自由选科: //3.在测试类中实例化学生对象,并打印每个学生选 ...

  5. JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)

    Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...

  6. HTML5.0实例练习(三) --制作一个简单登陆界面

    今天分享一个简单的实例--制作一个简单登陆界面 代码如下: 代码执行结果如下: 这里面用到了<table><th><td><tr>这些表格标签,这些在这 ...

  7. VIPLE初学者日记(三)实现一个简单定时器

    目标 做一个简单的定时器,实现语音报数从0数到99. 实现过程 如下图: 结果 语音报数 0.1.2.3-99,数一百个数,到99后,语音输出 all done.

  8. 新建maven写页面_使用 IDEA 创建 Maven Web 项目 (三)- 编写一个简单的 WEB 应用

    编写 Servlet 类 首先,需要在 java 目录下,创建一个名为 org.smart4j.chapter1 的包.然后,在该包下创建一个 HelloServlet  的类,代码如下: packa ...

  9. Java基础篇:一个简单的类

    让我们先从一个简单的例子来开始对类的研究.下面定义了一个名为box的类,它定义了3个实例变量:width,height和depth.当前,box类不包含任何方法(但是随后将增加一些). class B ...

最新文章

  1. 论文《一种金融市场预测的深度学习模型: FEPA》(4)----金融市场预测的架构--常见的数据降为方法
  2. 常年霸榜 Amazon 数据结构与算法领域 TOP3
  3. 观察者模式--初学入门
  4. MATLAB读取excel文件中的数据
  5. 纪念品分组pascal程序
  6. Java笔记(基础第二篇)
  7. C++STL之string (转)
  8. 反模式设计_设计模式:模式或反模式,这就是问题
  9. Ubuntu14.04中踩过的坑
  10. C语言中的多字节字符与宽字符
  11. 理解密码学中的双线性映射
  12. Hough变换——检测直线
  13. JAVA超市综合管理信息区块链系统毕设论文
  14. matlab分析系统灵敏度,matlab灵敏度分析函数
  15. 电脑桌面的计算机图标都不见了,如何解决电脑桌面的图标都不见了的问题
  16. Python 唤起QQ对话框 QQ客服效果
  17. Flask-Caching使用redis缓存后端加速页面重载
  18. Python实现psf2otf
  19. OpenGLES2.0渲图步骤:绘几何图形、图片处理、离屏渲染(3)
  20. 忆享科技聚焦|数字中国发展报告、政务云市场规模、网络安全、中小企业数字化……近期热点资讯一览

热门文章

  1. 【英语】五月,英语如影随形
  2. 如何创造千万GMV?教科书级的方法论在这
  3. 暴力破解zip密码 python
  4. 关于eclipse的Java文件前面有红色感叹号的解决办法
  5. 依巴谷星表中的毕星团认证杯B题
  6. pageoffice 破解 php,pageoffice+thinkphp结合
  7. 常见应用服务器监控的几种方式
  8. 显示器的维护与故障处理
  9. 图像传感器噪声建模与分析
  10. PyQt Phonon 模块初探