类可以实例化多次,每个实例也有所不同,那么在LUA中要实现这个就需要做到一个特性:实例化出来的属性上可以与其他实例不同,同时子类和父类之间可以增加字段和方法。
这个特性在实现上使用元表实现,为什么是原表,同时为什么基类要放在__index中?
首先理一下元表的特性:
如果子类在直接访问键的时候,如果表中没有,那么就会去原表中找。
如果__index是一个函数,那么当表中没有的时候,就会响应__index中的函数,传入表和键值。
这一点就和继承很类似,如果子类中没有,那么就想父类中找,如果都没有,就返回空。
这个特性就决定了可以使用元表来实现类的继承
local a = {c = 1}
a.__index = {b = "3"}
function TestClass()
local tt = {}
setmetatable(tt,a)
print(tt.b)
end