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.idself.nameself.age 访问成员,而不必硬编码表名。

   stu={id=100,name="Tom",age=21}

   function stu:toString()
    return self.id .. self.name .. self.age
   end
print(stu:toString())