【self:与self.的区别】

在Lua中,self:和self.分别用于调用对象方法和直接访问对象成员。self:在定义和调用方法时,自动传递对象本身作为第一个参数,如obj:sayHello()。self.则是在对象内部或方法中直接通过点号访问成员,如obj.name。这两种方式帮助程序员方便地操作和访问对象的属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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也使用点号来访问对象的成员变量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值