Menu
CoddyTech

为表结构添加方法

本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 44 课,共 80 课。

在 Lua 面向对象编程这一章中,你已经知道,表可以像存储其他值一样存储函数。形状也可以描述这些函数字段,让形状成为一份包含数据和行为的小契约。

方法字段使用你在函数这一章学过的函数类型语法。它的第一个参数通常命名为 self,也就是方法所属的表,而且形状甚至可以引用自身:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

要实现这个形状,可以在字段中存储一个函数,并给它添加 self 参数:

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

调用它时,需要自己把这个表作为 self 传入:greeter.greet(greeter)。通过 self,方法可以读取调用它的那个表中的字段。

把表写两遍有些麻烦,而你已经知道 Lua 的解决办法:冒号。下一课会讲解 : 语法与这些类型化形状之间的联系。

challenge icon

挑战

简单

为矩形添加一个计算面积的方法。

  1. 写出 type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}。
  2. 创建 local rect: Rectangle,设置 width 为 4,height 为 6,并设置 area = function(self: Rectangle): number,让它返回 self.width * self.height。
  3. 打印 rect.area(rect),然后打印 rect.width。

点击运行代码:输出会显示 24 和 4。

亲手试试

-- 1)定义类型 Rectangle,包含 width、height 和 area 方法
-- 2)创建局部变量 rect:类型为 Rectangle(width 为 4,height 为 6),并实现 area 方法
-- 3)先输出面积,再输出宽度

Luau 入门中的所有课

自己练习: Luau 在线编译器