Lua面向对象编程
Lua面向对象编程和c++面向对象编程,都是面向对象方法学,都支持类,继承,多态。
什么是类?在c++中,类其实是一个模板,实例化一个类后产生这个类的一个对象,然后才能像:对象.方法(),对象.属性,或者,类指针->方法()。可是在Lua中,类和这个类的对象之间的概念很模糊,lua语言构造的类,可以不经过实例化过程,直接当对象使用。这因为这样,lua中的对象是一种模拟。我们抽象理解为需要实例化过程,也许我讲的不是很清楚,我们看下代码:
--账户基类:Account Account = {balance = 100.00} --有一个blance属性 ---模拟Account实例化和继承思想所需的方法new() function Account:new(o) o = o or { } setmetatable(o,self) self.__index = self return o end --Account类的方法deposit(存款) function Account:deposit( v ) self.balance = self.balance + v end --Account类的方法deposit(取款) function Account:withdraw( v ) if v > self.balance then error "no enph money!" end self.balance = self.balance - v end ---------------------------------------------------------------------------------------- --派生子类 spacialAccount = Account:new{limit = 1000.00,rate = 0.100} --子类的新方法 function spacialAccount:setrate( v ) self.rate = v; end --实例化子类,得到对象s s = spacialAccount:new() --对象调用方法 s:setrate(0.300) print(s.balance) print(s.limit) print(s.rate)
子类继承父类,和实例化类产生新对象都用new()方法模拟实现,实现形式一样,但概念是不一样的,关系很微妙,很奇葩。