lua(仿类)

Account = {
  balance = 0
}

function Account:deposit(v)
  self.balance = self.balance + v
end

function Account:new(o)
  o = o or {}
  setmetatable(o, self)--Account表本身作为o的metatable
  self.__index = self--自己作为自己的原型??
  return o
end

a = Account:new{balance = 0}

--调用a的deposit,他会查找a的metametable的_index对应的表
--getmetatable(a).__index(a, 100)
--最终调用的是Account的deposit即Account.deposit(a, 100.00)
a:deposit(100.00)--通过这种方法调用了原始的Account的deposit

--将会继承默认的balance的值
b = Account:new()
print(b.balance)--b.balance等于0,下次访问此值时,不会涉及__index,b已经存在自己的balance域

--通过这种方法可以模拟面向对象,Account是类,而创建出来的b是这个类的对象
时间: 2024-07-29 02:29:30

lua(仿类)的相关文章

(转载)我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类

我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类 热血枫叶2015-06-19 16:27:182289 次阅读 Cocos2d-x 2.x 与 Cocos2d-x 3.x 差异(tolua++) Cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从Cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++. bindings-generator脚本的工作机制是: 1.不用编写.

Lua 仿PHP的strtotime

由于工作原因,两周前开始研究Lua,因为之前的项目要由php改成Lua实现,而一些php里现成的东西,在Lua里就需要手写,于是就有了下面的代码.写的比较粗糙,权当做个记录吧. --[[ 获取时间戳 --]] function strtotimestamp(timeToConvert) local ymdhis = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)" local runyear,runmonth,runday = getymd(timeToCon

我所理解cocos2d-x 3.6 lua -- Cocos如何绑定Lua自定义类

cocos2d-x 2.x 与 cocos2d-x 3.x 差异(tolua++) cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++. bindings-generator脚本的工作机制是:        1.不用编写.pkg和.h文件了,直接定义一个ini文件,注册到Lua环境里的模块名是什么,就行了.        2.摸清了toLua++工具

Lua面向对象----类、继承、多继承、单例的实现

(本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&utm_medium=referral lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模拟类也并不困难. lua中,面向对象是用元表这个机制来实现.

Lua工具类

--实现拷贝对象功能 function clone(object) local lookup_table={} local function _copy(object) if type(object)~="table" then return object elseif lookup_table[object] then return lookup_table[object] end local new_table={} lookup_table[object]=new_table f

lua 定义类 就是这么简单

在网上看到这样一段代码,真是误人子弟呀,具体就是: lua类的定义 代码如下: local clsNames = {} local __setmetatable = setmetatable local __getmetatable = getmetatable function Class(className, baseCls) if className == nil then BXLog.e("className can't be nil") return nil end if c

Lua的类型和值

Lua的类型和值 (一)基础介绍 Lua是一种动态类型的语言,变量不需要做定义.Lua中有八种类型,分别是 nil -- 空 boolean -- 布尔 number -- 数字 string -- 字符串 userdata -- 自定义 function -- 函数 thread -- 线程 table -- 表 用type()方法可以识别变量的类型. 1 print(type(nil)) --> nil 2 print(type(true)) --> boolean 3 print(typ

lua创建自定义的类

-- 使用lua自定义类 local _class = {} function BaseClass(super) -- 生成一个类类型, 实际上存放类信息 local class_type = {} -- 顶层父类"__delete"为false class_type.__delete = false -- 父类初始化 class_type.super = super -- 创建接口(类似与C++里面的构造函数) class_type.New = function(...) print

Lua 自己实现类Class代码,和高级用法

Class代码实现: function class(classname, super) local superType = type(super) local cls if superType ~= "function" and superType ~= "table" then superType = nil super = nil end if superType == "function" or (super and super.__cty