╮(╯_╰)╭还是个人感觉,LUA轻量简洁的语法,正式在于表这种类似于对象的使用,表:
- 拥有状态
- 独立于其值的标识
- 独立于创建者和创建地的生命周期
1.使用自参数是所有面向对象的语言的一个核心。大多数面向对象语言都能对我们隐藏部分自我参数,从而使我们不需要显示的调用这个参数。
(就跟此差不多)LUA使用该参数需要使用冒号
T = {A = 10} ------不使用
funtion t.add(self,x)
self.a = self.a + X
结束
t.add(5)
T = {A = 10} -------使用
函数t:add(x)
self.a = self.a + X
结束
T:添加(5)
2.继承(继承就是子类Ç能拿到父类˚F的成员,所以只需要把Ç.__索引设置为˚F就好了)
帐户= {平衡= 0} - ---父类
函数Account:new(o)------把Account设置为o的元表,相当于父类.o为子类
o = o或{} - 不传参数,则创建一个空表
setmetatable(个体,O)
自.__指数=自
返回o
结束
功能帐户:存款(v)
self.balance = self.balance + V
结束
功能帐户:撤回(v)
如果v> self.balance,那么错误“----”结束
self.banlance = self.balance-V
结束
SpecialAccount = Account:new() - 一个子类
S = SpecialAccount:新的{极限= 1000}
s.deposit(100)----这时会查询s的父类SpecialAccount,没找到,再查询Account,找到deposit实现
3.多重继承
本地函数搜索(k,list)-----列表中存放所有的父类
对于i = 1,#列表做
本地v =列表[i] [k]
如果v然后返回v结束 - 假设子类没有成员k,那就要到每个父类中查找k是否为nil,不为nil就返回父类这个k
结束
结束
函数createClass(...。)
本地c = {} - 新类
本地父= {...。}
setmetatable(c,{__ index = function(t,k) - 类在其他类中搜索方法
返回搜索(k,父母)
结束})
c .__ index = c - 将c作为其实例的元表
函数c:new(o) - 为这个新类定义一个新的构造函数
o = o或{}
setmetatable(O,C)
返回o
结束
返回c - 返回新类
结束
假设有两个类,一个是之前的帐户,一个是名称类,他有两个方法的setName,的getName:
命名= {}
函数名称:getname()
返回self.name
结束
函数name.setname()
self.name =正
结束
现在创建一个nameAccount类,同时从名称和帐号派生,只需要调用createClass
nameAccount = createClass {帐户,名称}
账户= nameAccount:新{名称=” FCW”}
打印(帐户:getname)---打印fcw