冒号 : 点 . 在lua中的函数作用

在lua中,冒号: 和点. 对于函数的影响是函数的定义和调用.
定义函数可以用点也可以用冒号

function mytable.fun(p)
    return p
end

function mytable:fun(p)
    return p
end

用冒号: 定义的函数有个特性,那就是在函数里可以使用self来表示本身的表。self 不是lua 关键字,但是却和c#,c++里的this有异曲同工之妙。

function mytable:fun(p)
    print(self) -- self 代表了本身的表
    return p
end

当我们在用点.定义的函数里使用self 的时候,self 会是nil值。

说完函数定义,在解释下两种函数调用的区别。
用冒号: 和用点. 都可以调用到同一个函数,但是在传入的参数方便却是有些不同的。

local mytable = {name = “jayden”,age = 18}
function mytable:fun1(p)
 print(self)
 print(p)
 print(self.name)
end

使用冒号来调用冒号定义的函数

mytable:fun1("jk")
-- 输出
-- table: 01D59712
-- jk
-- jayden

可见使用冒号来调用的是,self 是mytable 本身,且可以正确调用。

使用点来调用冒号定义的函数

mytable.fun1("jk")
-- 输出
-- jk
-- nil
-- nil

可以看到当用点来调用冒号定义的函数时,如果函数内有用到self,则self就是传入的第一个参数,示例中的“jk”作为第一个参数赋值给了self,而想输出的p值却缺失了,变成了nil。

我们再来看看点定义的函数,用冒号来调用会怎么样

function mytable.fun1(p1,p2)
  print(p1)
  print(p2)
end

用冒号来调用点定义的函数

mytable:fun("jayden",18)
--输出
--table:00C58710
--jayden

是不是很奇怪?在用冒号来调用函数时,会强制把自身作为第一个参数传入到函数中,此时p1 已经强制被变成了mytable,而jayden则作为了第一个参数传入到了函数里。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,259评论 0 38
  • 0.lua的特性是什么? 1)lua是一种轻量级的脚本解释语言,在游戏开发过程中多用于实现需要进行热更新的逻辑 它...
    你猜卟透_faa8阅读 1,971评论 0 0
  • 函数有两种用途: 完成指定任务,此时函数作为调用语句使用。 计算并返回值,此时函数作为赋值语句的表达式使用。 调用...
    JunChow520阅读 3,877评论 0 3
  • 我有很多话对自己说,我把那个自己称为你,我害怕直言我,自己恼羞成怒,所以我借由你的口转诉。 我希望我说的,你能认真...
    普小怀阅读 242评论 0 1
  • 带着看一看范冰冰弟弟参加节目的心情看了一眼爱奇艺的《偶像练习生》。 在笔者心中留下了一个不是很好的印象。 张艺兴全...
    胡言说影视阅读 274评论 0 0

友情链接更多精彩内容