前言
在使用Unity进行游戏开发的时候,可以通过Lua进行脚本的编写,但是Lua与C#不同,C#是一个面向对象的语言,Lua是面向过程的语言,如何用Lua来实现面向对象编程,实现对象的继承和多态的特性呢。
Lua元表(Metatable)和元方法(__index)
在Lua的table中我们可以访问对应的Key来得到Value值,但是无法对两个table进行操作。Lua提供了元表(metatable),可以通过其进行table之间的关联。
- setmetatable(table,metatable): 对指定table设置元表(metatable)。
同时,可以通过元方法__index(注意是两个下划线), 作为键来指定一个匿名方法,或者table。
在setmetatable(myTable,metatable) 中,myTable是我们自己定义的一个表,metatable是__index指定的表或者方法,就相当于让myTable背上了一个书包,当我们调用myTable里面的属性或者方法的时候经历如下步骤:
- 首先从自己身上找,如果找到就拿出来。
- 如果从自己身上找不到,从__index里找。
- 如果__inde