LUA之面向对象

    Account = { balance=0,
                withdraw = function (self, v)
                             self.balance = self.balance - v
                           end
              }

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

    Account.deposit(Account, 200.00)
    Account:withdraw(100.00)

上面这个例子, 首先, Account是一个table, 里面两个元素, 一个是key为balance, value为0, 一个是一个key为withdraw, value是一个函数.

可以看得出:

1.  函数可以在table里面定义, 这个跟js很像.

2.  self是LUA里面的this

3.  调用函数的方法是用.

4. 如果你想省略self当形参, 可以用冒号来定义跟使用这个函数.

另外, 下面这个例子说明LUA真的是OO:

    Account = {balance = 0}
    function Account.withdraw (v)
      Account.balance = Account.balance - v
    end
    a = Account; Account = nil
    a.withdraw(100.00)   -- ERROR!

也就是说, 当一个变量指向另一个对象, 就无法再调用这个对象的有关原来这个对象的field了, 唯一的写法是用self, 也就是this, 把自己的field指向自己的field, 听起来好像哪里不对.

    function Account.withdraw (self, v)
      self.balance = self.balance - v
    end

再调用:

    a1 = Account; Account = nil
    ...
    a1.withdraw(a1, 100.00)   -- OK

就OK了.

后面还有OO的继承, 封装, 实现接口, 这些并不是我关心的, 毕竟LUA实现OO在我看来就是扯淡, 我需要它处理一点str就好, 后面的就不研究了.

时间: 2024-09-30 11:05:51

LUA之面向对象的相关文章

lua实现面向对象

lua实现面向对象 lua实现面向对象 实现类的定义 实现类的继承 实现类的定义 function people( name) local self = {} local function init( ... ) self.name=name end self.sayHi=function ( ... ) print("hello"..self.name) end init() return self end 实现类的继承 function Man( name) self=people

Lua 之面向对象编程

Lua 之面向对象编程 Lua并不是为面向对象而设计的一种语言,因此,仅从原生态语法上并不直接支持面向对象编程,但Lua的设计中仍然包含了很多面向对象的思想,理解它们也更有助于理解Lua自身的一些高级机制. 对象 Lua中的table就是一种对象,它可以有函数字段.在面向对象(Object Oriented)编程中,对象的方法(method)通常使用self(或this)参数标识对象自身,在Lua中也可以使用冒号(:)实现类似的功能,如下面的例子: Account = {balance=0} f

lua学习:lua实现面向对象

之前写过一篇关于lua实现面向对象的文章,借助元表和元方法实现,感觉也是有点乱. 我们可以参考cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现: function class(classname, super) -- print(classname) local superType = type(super) local cls if superType ~= "function" and superType ~= "

Lua学习----面向对象编程

1.类 再Lua中可以使用表和函数实现面向对象,将函数和相关的数据放置放置于同一个表中就形成了对象.例如: Measure = {width = 0, height = 0} function Measure:setWifth(v) self.width = self.width + v end function Measure:setHeight(v) self.height = self.height + v end function Measure:getMeasure() print(s

lua的面向对象实现

百度搜索一下,给出出的解决方案和学习帖子很多,可是我还是有很多的问题! (1)什么是面向对象? (2)lua中怎么实现面向对象? (3)什么样的实现既简单又能完成我的功能? (4)一定要按照c++的方式实现类的继承吗? 能力有限,在学习lua面向对象的时候我比较喜欢两种实现方式: 1. 简单粗暴的实现 参考[1]:参考同事的方法,如果借鉴.转载请注明 在lua中,我们知道table是万能的一个类型,当我们用table实现一个基类和子类的时候,他们都是确确实实存在的一个个table,都是有地址的.

Lua的面向对象——类和继承

本文转载于:http://www.benmutou.com/archives/1791 终于来了,在Lua中的面向对象编程,相信目前学习Lua的大部分人都是为了开发手机网游吧.而且基本都是奔着脚本语言的热更新特性去的,所以全脚本开发变得十分流行. 对于普及不太广的Lua(相对于C++.Java等主流语言),需要短时间上手开发游戏,对新手而言不算简单.所以大家才更习惯于继续用面向对象思想去折腾Lua吧~ 好了,不唠叨了,我最不喜欢唠叨了.(小若:是是是,你一点都不唠叨,赶紧开讲!) 1.类的对象

Lua的面向对象——多重继承、私密性

本文转载于:http://www.benmutou.com/archives/1800 在Lua中的多重继承和私密性可能用得比较少,也可能只是我个人用得比较少. 本来想偷懒不写这文章的,因为我今天刚买了个漂移板,连起步都还没学会啊,想多学一会. 咳咳,本着坚持不懈.负责到底的态度,我还是决定随便写几句~(小若:随便写几句是几吨意思啊?!) 1.多重继承之在多个类中查找一个字段 我发现这些高(shen)智(jing)商(bing)人群真的很厉害,这种技巧都能想到,很佩服. 其实多重继承没什么特别的

[Lua]Lua的面向对象程序设计

Lua中的表不仅在某种意义上是一种对象.像对象一样,表也有状态(成员变量):也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象:一个对象在不同的时候也可以有不同的值,但他始终是一个对象:与对象类似,表的生命周期与其由什么创建.在哪创建没有关系. local Account = {balance = 0} function Account.withdraw(v) Account.balance = Account.balance - v end --调用方法如下:

Lua的面向对象,封装,继承,多态

概述 我们总所周知对象是由属性和方法组成的,要用lua要描述一个对象,也必然要有这两个特性,属性和方法.lua的基本结构是table,所以Lua的类,其实都是table,因为它可以存储普通的变量又可以存储方法,我们利用table就可以描述一个对象的属性和方法. 对象 其实lua要模拟一个对象,关键就在于__index设置元表索引这块,它主要起到索引失败后该怎么办,如果它指向一张表,那么__index索引失败后,它会到这张表中去查找有没有你指定的函数或成员值,如果有,__index方法被调用时会返

【Lua】面向对象编程(一)

类和对象: account.lua   module(...,package.seeall) Account={balance=0} Account.new=function(self,o) local o=o or {} setmetatable(o,self) self.__index=self return o end Account.getBalance=function(self) return self.balance end Account.setBalance=function(