Lua的OOP方案
Lua语言本身并没有提供面向对象的语法机制,这需要我们自己设计实现一套类的机制。首先,对于面向对象编程,至少需要类和对象这两个概念 。目前有两种方式来完成实现Lua的面向对象编程:一种是利用Lua的元表( metatable )来模拟OOP;另一种是利用第三方库封装的OOP能力来写代码(比如middleclass)。
matetable 方式
定义类
父子类继承——元表方式实现
middleclass 方式
通过middleclass 实现OOP,Github地址是 https://github.com/kikito/middleclass
下面是示例代码,也可以详细参考项目Wiki
local class = require 'middleclass'
local Fruit = class('Fruit') -- 'Fruit' is the class' name
function Fruit:initialize(sweetness)
self.sweetness = sweetness
end
Fruit.static.sweetness_threshold = 5 -- class variable (also admits methods)
function Fruit:isSweet()
return self.sweetness > Fruit.sweetness_threshold
end
local Lemon = class('Lemon', Fruit) -- subclassing
function Lemon:initialize()
Fruit.initialize(self, 1) -- invoking the superclass' initializer
end
local lemon = Lemon:new()
print(lemon:isSweet()) -- false