lua是一个非常轻巧的脚本语言。这里通过几个步骤,说明lua如何实现类的功能。
1、通过clone函数复制表
function clone( tab_ )
local tab = {}
for k,v in pairs(tab) do
tab[k] = v
end
return tab
end
2、定义类的成员函数new,用于实例化对象
Myclass = {}
Myclass.new = function ( )
local self = clone(Myclass)
return self
end
3、继承
通过复制表的方式,实现继承
function copy(dist,tab) --把tab表里的数据复制给dist
for k,v in pairs(tab) do
dist[k] = v
end
end
base = {} --基类
base.new = function ( )
local self = clone(Myclass)
return self
end
inheritance = {} --继承自base类
inheritance = function()
local self = base.new()
copy(self,inheritance)
return self
end
4、函数重写
函数重写非常简单,直接赋值给子类一个新的函数就行
inheritance.fun = function ( ... )
-- body
end
5、私有成员
通过函数闭包的方法,可以实现类的成员私有化
function People( name )
local self = {}
local function init() --闭包实现私有成员函数
self.name = name
end
self.sayHi = function()
print("Hi "..self.name)
end
init() --相当于构造函数
return self
end
function Man(name) --继承自People的类
local self = {}
local function init()
self = People(name)
end
self.sayHello = function()
print("Hello "..self.name)
end
init()
return self
end
local m = Man("QJ")
m:sayHello() --"Hello QJ"
m:sayHi() --"Hi QJ" 继承基类的方法
6、总结
lua可以通过复制表和闭包的方法来实现类的特性,使用复制表效率更高,使用闭包给符合使用习惯。