冒号定义函数中的self指向函数所属表对象,即self是table类型,通过self表可以:访问挂载在该表下的所有冒号定义函数 如,有定义A={},A:b() A:c();函数b,c都是冒号定义函数,在b,c函数内部self是地址指向A的表,在b函数中可以通过self:c()来调用c函数,同理在c函数中也可以通过self:b()来调用b函数 代码示例:
local tb={name="tb"}
function tb:func1()
print("调用func1")
end
function tb:func2()
print("调用func2")
end
function tb:test()
self:func1()
self:func2()
end
tb:test()
--调用func1
--调用func2
总之lua点定义的函数中self=nil,不像冒号定义函数那样可以self指向函数所属对象
点调用冒号定义函数,第一个参数传递给self,调用无参时,self=nil
local tb={name="tb"}
function tb:func1(parm1,parm2)
print("self=",self,"self name=",self.name)
print("parm1=",parm1)
print("parm2=",parm2)
end
print("------------点调用冒号定义函数---------------")
--点调用冒号定义函数,第一个参数传递给self
tb.func1("第一个参数","第二个参数")
输出《
------------点调用冒号定义函数---------------
self= 第一个参数 self name= nil
parm1= 第二个参数
parm2= nil
冒号调用点定义函数,调用者对象表传递给点定义函数的第一个参数,点定义函数内部self=nil
local tb={name="tb"}
function tb.func2(parm1,parm2)
print("self=",self)
print("parm1=",parm1)
print("parm2=",parm2)
end
print("------------冒号调用点定义函数---------------")
--冒号调用点定义函数,调用者对象表传递给点定义函数的第一个参数
tb:func2("第一个参数","第二个参数")
输出《
------------冒号调用点定义函数---------------
self= nil
parm1= table: 0x000393c0
parm2= 第一个参数
all:
local tb={name="tb"}
function tb:func1(parm1,parm2)
print("self=",self,"self name=",self.name)
print("parm1=",parm1)
print("parm2=",parm2)
end
function tb.func2(parm1,parm2)
print("self=",self)
print("parm1=",parm1)
print("parm2=",parm2)
end
print("------------冒号调用冒号定义函数---------------")
--冒号调用冒号定义函数
tb:func1("第一个参数","第二个参数")
print("------------点调用冒号定义函数---------------")
--点调用冒号定义函数,第一个参数传递给self
tb.func1("第一个参数","第二个参数")
print("------------冒号调用点定义函数---------------")
--冒号调用点定义函数,调用者对象表传递给点定义函数的第一个参数
tb:func2("第一个参数","第二个参数")
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有