在Lua中,self:和self.是用于访问对象成员的两种不同的语法形式。
-
self:用于定义和调用对象方法时,通过自动传递对象本身作为第一个参数来访问对象成员。
-
self.用于对象内部或对象方法中直接访问对象成员。
-
self:是一种特殊的语法,用于定义和调用对象方法。当你定义一个对象方法时,需要在函数的参数列表中加入一个特殊的参数,通常被称为self。
-
self参数表示对象本身,使用冒号(:)来调用对象方法时,实际上会自动传递对象本身作为第一个参数。这样,你就可以在方法中通过self来访问对象的其他成员。例如:
-- 定义一个对象
local obj = {
name = "Master Yi",
sayHello = function(self)
print("Hello, my name is " .. self.name)
end
}
调用对象方法:
obj:sayHello() – 这里的调用方式等价于 obj.sayHello(obj)
在上面的例子中,sayHello方法的定义中包含了一个self参数,通过self.name可以访问对象的name成员。当我们使用obj:sayHello()调用方法时,对象obj会作为self参数自动传递给方法。
self.则是用于直接访问对象的成员变量或成员函数。当你在对象内部或对象方法中使用点号(.)来访问对象的成员时,不需要显式地传递self参数,而是直接使用点号后面的成员名。例如:
-- 定义一个对象
local obj = {
name = "Master Yi",
sayHello = function(self)
print("Hello, my name is " .. self.name)
end
}
-
在对象内部访问成员变量 print(obj.name) – 输出 “Master Yi”
-
在对象方法中访问成员变量 obj:sayHello() – 输出 “Hello, my name is Master Yi”
在上面的例子中,obj.name使用点号直接访问对象的成员变量,obj:sayHello()中的self.name也使用点号来访问对象的成员变量。