专栏首页游戏开发之旅Lua函数的冒号调用和点调用

Lua函数的冒号调用和点调用

lua冒号函数的定义和调用

冒号定义函数中的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点函数的定义和调用

总之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("第一个参数","第二个参数") 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Lua实现继承

    原文链接:https://www.jianshu.com/p/fefe11d4544e

    bering
  • Lua 5.3 的调试库

    如果 message 有,且不是字符串或 nil, 函数不做任何处理直接返回 message。 否则,它返回调用栈的栈回溯信息。 字符串可选项 message ...

    bering
  • uinty中对Xml文件的操作

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    bering
  • Python面向对象基础

    NOTE: 重要强调:     Python的作用域和命名空间 (1)命名空间 是从命名到对象的映射     ①内置命名空间     ②全局命名空间:模块   ...

    py3study
  • PHP5常用函数

    PHP已经更新到很多个版本,最近用的比较多的要数PHP5。下面我们为大家总结了PHP5常用函数,以便大家将来实际编写代码中查看。 pathinfo返回文件路径的...

    wangxl
  • 字典常用操作

    skylark
  • JS基础知识点(二)

    在上一篇文章《JS基础知识点(一)》中我们学习了什么是js、js写法、js数据类型、js的函数。在本篇文章中我们将学习重要的部分:面向对象以及常用对象(math...

    凯哥Java
  • python的异常处理

    try: print(x) print('hello')     l=[1,2,3]     l=[0] except NameErroras e: pr...

    py3study
  • 数据类型

    用于存储多个字,也可以用key很快的检索到value,其中key以及value不能为没有意义的变量名

    小小咸鱼YwY
  • 四行代码让你的python挑战吴亦凡rap

    那么作为一个成熟的python,听说读写是一个必备的技能,如果能让python对指定内容进行阅读,实现语音播报功能,再结合一把具有盲文的键盘,盲人编程指日可待,...

    行哥玩Python

扫码关注云+社区

领取腾讯云代金券