Menu
CoddyTech

冒号语法

本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 3 课,共 70 课。

每次都写 counter.increment(counter) 很繁琐,也容易出错。Lua 提供了一种更简洁的方式:冒号(:)运算符。

使用冒号定义函数时,Lua 会自动将 self 添加为第一个参数:

local player = {
    name = "Hero"
}

-- 定义时使用冒号
function player:greet()
    print("Hello, I am " .. self.name)
end

调用函数时也可以使用冒号。它会自动将表作为第一个参数传入:

player:greet()  -- 输出:Hello, I am Hero

这相当于编写 player.greet(player),但整洁得多。冒号会在两处处理 self 参数:定义时和调用时。

下面的对比展示了这两种写法会产生相同的结果:

local counter = { value = 0 }

-- 点号语法(显式传入 self)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- 冒号语法(自动传入 self)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

冒号语法是在 Lua 中定义和调用方法的标准方式。它能让你的代码更简短,也减少重复。

challenge icon

挑战

简单

创建一个名为 greeter 的表,其中包含一个名为 message 的字段,并将其初始化为你会通过输入收到的值。

使用冒号语法添加一个方法 :sayHello(name),按以下格式打印问候语:

[message], [name]!

你会收到两个输入:

  1. 要存储在 greeter.message 中的问候语
  2. 要传递给 :sayHello() 方法的名字

使用冒号语法定义并调用这个方法,然后打印格式化后的问候语。

例如,如果问候语是 Welcome,名字是 Luna,输出应为:

Welcome, Luna!

亲手试试

-- 读取输入
local message = io.read()
local name = io.read()

-- TODO:在下方编写你的代码
-- 1. 创建一个名为 'greeter' 的表,其中包含字段 'message'
-- 2. 使用冒号语法添加方法 :sayHello(name)
-- 3. 使用冒号语法调用该方法,打印问候语
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Lua 在线编译器