Lua模拟面向对象示例分享
代码很简单,这里就不多废话了,大家主要看看思路
function class(super)
local mt = {__call = function(_c, ...)
local function create(_c, _o, ...)
if _c.__super then create(_c.__super, _o, ...) end
if _c.__ctor then _c.__ctor(_o, ...) end
return _o
end
local _o = create(_c, {}, ...)
return setmetatable(_o, _c)
end}
mt.__index = super or mt
return setmetatable({__super = super}, mt)
end
----------------------------------------------------------------------
A = class()
function A:__ctor(s)
self.i = 123
self.j = 333
print('A ctor', s)
end
local a = A('a')
print(a.i, a.j)
-- B继承A
B = class(A)
function B:__ctor(s)
self.i = 444
print('B ctor', s)
end
local b = B('b')
print(b.i, b.j)
示例截图
以上就是本文的全部内容了,希望大家能够喜欢。
相关推荐
-
Lua 极简入门指南(七):面向对象编程
类 在很多面向对象的语言中有类(class)的概念,对象是类的实例.Lua 中不存在类的概念.Lua 就像 JavaScript 一样是面向原型的语言(http://en.wikipedia.org/wiki/Prototype-based_programming),这类语言使用一个对象表示一个"类",其他对象(此类的实例)使用此对象作为原型.我们有两个 table p 和 obj,将 p 设置为 obj 的原型(回顾:http://www.jb51.net/article/56690
-
Lua面向对象之类和继承浅析
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,如下: 复制代码 代码如下: Account = {balance = 0} function Account.withdraw(v) Account.balance = Account.balance - v end --下面是测试调用函数 Account.withdraw(100.00) 在上面的withdraw函数内部依赖全局变量Account,一旦发生改变,将会导致withdraw不能正常工作,如:
-
Lua中的面向对象编程详解
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码 代码如下: local tb1 = {a = 1, b = 2} local tb2 = {a = 1, b = 2} local tb3 = tb1 if tb1 == tb2 then print("tb1 == tb2") else print("tb1 ~= tb2") end tb3.a = 3 print(tb1.a) 上述代码会输
-
Lua中实现面向对象的一种漂亮解决方案
在 pil 中,lua 的作者推荐了一种方案来实现 OO,比较简洁,但是我依然觉得有些繁琐. 这里给出一种更漂亮一点的解决方案,见下文: 这里提供 Lua 中实现 OO 的一种方案: 复制代码 代码如下: local _class={} function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local
-
Lua面向对象之类和继承
终于来了,在Lua中的面向对象编程,相信目前学习Lua的大部分人都是为了开发手机网游吧. 而且基本都是奔着脚本语言的热更新特性去的,所以全脚本开发变得十分流行. 对于普及不太广的Lua(相对于C++.Java等主流语言),需要短时间上手开发游戏,对新手而言不算简单. 所以大家才更习惯于继续用面向对象思想去折腾Lua吧~ 好了,不唠叨了,我最不喜欢唠叨了.(小若:是是是,你一点都不唠叨,赶紧开讲!) 1.类的对象 至于如何创建一个类,大家已经很清楚了,就是一个table而已. 那么,要使用这个类去
-
Lua面向对象之多重继承、私密性详解
在Lua中的多重继承和私密性可能用得比较少,也可能只是我个人用得比较少. 本来想偷懒不写这文章的,因为我今天刚买了个漂移板,连起步都还没学会啊,想多学一会. 咳咳,本着坚持不懈.负责到底的态度,我还是决定随便写几句~(小若:随便写几句是几吨意思啊?!) 1.多重继承之在多个类中查找一个字段 我发现这些高(shen)智(jing)商(bing)人群真的很厉害,这种技巧都能想到,很佩服. 其实多重继承没什么特别的,除非两个将要被继承的类有相同的函数名和属性,否则,处理起来很简单. 无非就是在多个
-
Lua面向对象编程学习笔记
其实 Lua 中的 table 是一种对象,因为它跟对象一样,有其自己的操作方法: 复制代码 代码如下: Role = { hp = 100 } function Role.addHp(hp) Role.hp = Role.hp + hp end Role.addHp(50) print(Role.hp) 上面代码创建了一个名为 Role 对象,并有一个 addHp 的方法,执行 "Role.addHp" 便可调用 addHp 方法. 不过上面对象 Role 是以全局变量的
-
Lua模拟面向对象示例分享
代码很简单,这里就不多废话了,大家主要看看思路 复制代码 代码如下: function class(super) local mt = {__call = function(_c, ...) local function create(_c, _o, ...) if _c.__super then create(_c.__super, _o, ...) end if _c.__ctor then _c.__ctor(_o,
-
Java编程实现的模拟行星运动示例
本文实例讲述了Java编程实现的模拟行星运动.分享给大家供大家参考,具体如下: 期待了很久的Java语言程序设计也拉下了帷幕,在几个月的时间里基本掌握了java的简单用法,学习了java的主要基础知识,面向对象思想,多线程并发控制,swing界面设计,动画制作等,最后结课了也打算制作一个课程设计能够尽可能多的涵盖所学知识,将其进行串联,因此考虑实现了一个简单的模拟行星运动的小软件,主要思路如下: 利用动画实现行星运动的模拟,主面板里有一个中心行星,同时绘制了椭圆轨道,有一颗运动的行星围绕着中心行
-
Composition Api封装业务hook思路示例分享
目录 前序 hook的场景 useGetJobList 共同 思路历程 心得 utils 和 hook 的区别 总结 前序 近期公司的新项目一个小程序,一直想尝试 Vue3 开发项目,苦于自己的驱动力不行,学的零零碎碎的.因此小程序我直接跟项目组长说我要使用 uniapp 的 Vue3 版进行开发.开发中遇到业务场景相同的,就分装了一个hook 来减少代码,易于维护. hook的场景 这种获取列表的需求很常见吧,在我这个小程序中有3处使用到了获取列表的功能.分别是: 我的收藏.已投递岗位.未投递
-
javascript请求servlet实现ajax示例(分享)
ajax请求是一种无刷新式的用户体验,可以发送GET和POST两种异步请求,现记录如下: GET请求: function sendRequestByGet(){ //定义异步请求对象 var xmlReq; //检测浏览器是否直接支持ajax if(window.XMLHttpRequest){//直接支持ajax xmlReq=new XMLHttpRequest(); }else{//不直接支持ajax xmlReq=new ActiveObject('Microsoft.XMLHTTP')
-
adonet基础示例分享(adonet连接数据库)
adonet基础示例分享 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using Sys
-
JavaScript碎片—函数闭包(模拟面向对象)
经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知,如有错误,还请见谅. 具体来说实现模拟面向对象主要是利用JavaScript函数闭包这个概念.由于JavaScript中的每一个function都会形成一个作用域,而如果变量声明在这个域中,那么外部是无法直接去访问,要想访问必须new出一个实例来,相当于Java中class.首先让我们来了解一下pr
-
java贪心算法初学感悟图解及示例分享
算法简介 1)贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致是最好或者最优的算法 2)贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果. 应用场景 --> 集合覆盖 public class GreedyAlgorithm { public static void main(String[] args) { // 创建广播电台,放入到Map HashMap<String, HashSet<
-
java数据结构与算法数组模拟队列示例详解
目录 一.什么是队列 二.用数组来模拟队列 一.什么是队列 队列是一个有序列表,可以用数组或者链表来实现. 遵循先入先出的原则,即:先存入队列的数据,要先取出.后存入的的数据,后取出. 看一张队列的模拟图,1,2,3表示同一个队列Queue.在队列中有2个指针,front表示队首,rear表示队尾. 图1中表示队列里还没有数据,所以front跟rear初始化都是-1. 当图2中有数据进行存入的时候,front没变,而rear则随着数据的增多而改变.存入了4个数据,于是rear=3. 再看图3,f
-
GO语言操作Elasticsearch示例分享
目录 Elasticsearch简介 连接Elasticsearch 创建索引 创建model结构体 初始化model 创建索引 搜索数据 创建返回结构体 搜索数据 解析数据 修改数据 单条修改 批量修改 删除数据 单条删除 批量删除 Elasticsearch简介 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库–无论是开源还是私有. 连接Elasticsearch
-
Lua利用cjson读写json示例分享
我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高10~20倍.并且Lua Json完全支持UTF-8,无需以来其他非Lua/LuaJit相关包. 环境安装 这里就不详细写了,随便问下谷歌就有一大堆答案. 示例代码 解析JSON 复制代码 代码如下: local cjson = require "cjson" local sampleJson = [[{"age":"23","testArr
随机推荐
- 正则表达式进行页面表单验证功能
- VBA中操作Excel常用方法总结
- SQL Server 2008 清空删除日志文件(瞬间日志变几M)
- mongodb中随机获取1条记录的实现方法
- 美女游戏病毒iwbkvd.exe查杀方法
- jquery插件jquery.confirm弹出确认消息
- python通过ElementTree操作XML获取结点读取属性美化XML
- socket + select 完成伪并发操作的实例
- Java2下Applet数字签名
- C++调试追踪class成员变量的方法
- MySQL如何导入csv格式数据文件解决方案
- PHP获取当前日期和时间及格式化方法参数
- 浅析js 文字滚动效果
- 调整SQLServer2000运行中数据库结构
- JS完成代码前最好对其做5件事
- java数据库操作类演示实例分享(java连接数据库)
- ADO与ADO.NET的区别与介绍
- php之readdir函数用法实例
- Java反射之Call stack introspection详解
- MVC框架是什么 这里为你解答