Lua 面试题 目录

Lua 中如何实现继承?

推荐答案

在 Lua 中,可以通过元表(metatable)和元方法(metamethod)来实现继承。具体步骤如下:

  1. 创建一个基类(父类)表。
  2. 创建一个子类表。
  3. 设置子类的元表为基类表。
  4. 使用 __index 元方法来实现继承。

示例代码如下:

-- -------------------- ---- -------
-- --
--------- - --
-------- ----------------
    - - - -- --
    --------------- -----
    ------------ - ----
    ------ -
---

-------- ---------------------
    ------------------
---

-- --
-------- - ---------------

-------- --------------------
    -----------------
---

-- ------
----- -------- - --------------
--------------------  -- --- --------

本题详细解读

1. 基类的定义

在 Lua 中,基类是一个普通的表。我们通过 BaseClass:new(o) 方法来创建基类的实例。new 方法接受一个可选参数 o,如果 onil,则创建一个新的空表。然后,我们将这个表的元表设置为 BaseClass,并通过 self.__index = self 来实现继承。

2. 子类的定义

子类是通过 BaseClass:new() 创建的。这意味着子类的元表是基类表。子类可以重写基类的方法,如 printName 方法。

3. 创建子类实例

通过 SubClass:new() 创建子类的实例。由于子类的元表是基类表,因此子类实例可以访问基类的方法和属性。如果子类重写了基类的方法,调用时会优先使用子类的方法。

4. __index 元方法的作用

__index 元方法在 Lua 中用于实现继承。当访问一个表中不存在的键时,Lua 会查找该表的元表中的 __index 字段。如果 __index 是一个表,Lua 会在该表中查找键值;如果 __index 是一个函数,Lua 会调用该函数。

在这个例子中,self.__index = self 表示当子类实例访问一个不存在的键时,Lua 会在基类表中查找该键。这样就实现了继承机制。

纠错
反馈