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