冒号语法
本课属于 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 中定义和调用方法的标准方式。它能让你的代码更简短,也减少重复。
挑战
简单创建一个名为 greeter 的表,其中包含一个名为 message 的字段,并将其初始化为你会通过输入收到的值。
使用冒号语法添加一个方法 :sayHello(name),按以下格式打印问候语:
[message], [name]!你会收到两个输入:
- 要存储在
greeter.message中的问候语 - 要传递给
:sayHello()方法的名字
使用冒号语法定义并调用这个方法,然后打印格式化后的问候语。
例如,如果问候语是 Welcome,名字是 Luna,输出应为:
Welcome, Luna!亲手试试
-- 读取输入
local message = io.read()
local name = io.read()
-- TODO:在下方编写你的代码
-- 1. 创建一个名为 'greeter' 的表,其中包含字段 'message'
-- 2. 使用冒号语法添加方法 :sayHello(name)
-- 3. 使用冒号语法调用该方法,打印问候语这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Lua 在线编译器