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