概述
Lua中的table本身就是一种对象
- table和对象一样可以拥有状态、属性,以及对这些状态和属性的操作
- table和对象一样拥有独立其值的标志(self)
- table和对象一样具有独立于创建者的生命周期,换句话说,就是自己掌握自己的生命周期
但是,和C++、Java语言不一样,它并不存在显示的关键词(例如,Class)来描述一个类,所以我们只能利用table和元表机制来模拟类
Lua的面向对象是建立在元表和元方法这一机制上的,应当清楚的明白Lua的key-value的查询过程:
模拟类
最简单的定义类的方法,即直接使用Lua内置的table描述类的属性和行为
Account = {
balance = 100,
withdraw = function(v)
Account.balance = Account.balance - v
end
}
如果拿C++来类比的话,看起来有点像如下形式
class Account{
public int balance = 100;
public void withdraw(int value){
balacne -= value;
}
}
不同的是在Lua中Account只是一个表,相当于一个对象,而C++中Account则是类,可以生成多个对象。
而且Lua的Account实现有很多值得吐槽的地方
- 在函数withdraw中直接访问全局变量Account