Lua 中冒号与点号的区别
在 Lua 中调用表(table)的成员函数时,可以使用 . 或 : 两种写法,二者的区别在于是否隐式传递 self 参数。
使用点号(.)定义与调用
当使用点号定义成员函数时,函数内部如果要访问表的成员,必须通过表名(例如 stu.id)显式引用。此时调用方既可以用 .,也可以用 :,但由于函数体内没有使用 self,两种调用方式对这个例子来说都能得到相同的结果。
stu={id=100,name="Tom",age=21}--成员变量
function stu.toString()--成员函数
return stu.id .. stu.name .. stu.age
end
print(stu.toString())
print(stu:toString())
使用冒号(:)定义与调用
当使用冒号定义成员函数时,Lua 会自动在函数内部注入一个名为 self 的隐式参数,指向调用者本身。因此函数体可以直接通过 self.id、self.name、self.age 访问成员,而不必硬编码表名。
stu={id=100,name="Tom",age=21}
function stu:toString()
return self.id .. self.name .. self.age
end
print(stu:toString())