博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua的点和冒号的区别
阅读量:5069 次
发布时间:2019-06-12

本文共 911 字,大约阅读时间需要 3 分钟。

lua的语法很简单,太简单了,所以lua就复杂了

两个点与一个点有什么区别呢?

一个点用来定义和取得一个变量,这个变量可能是个函数

两个点用来定义和调用一个函数,两个点会自动传入“调用者”这个table自身

先看简单的:

c = {a = 1, b = 2}

function c:foo()

  print(self.a,self.b)

end

这里,c这个table定义了一个foo函数,用两个点定义的,在foo函数第一个参数的地方自动传入了c自身,然后调用一下

c:foo()

输出1 2

也可以这样,一个点调用函数,手动传入table:c.foo(c)

输出也是一样的

 

下面看复杂一点的:

两个点会自动传入调用者本身,但是他仅仅只会传入调用者本身,他没有一个点灵活,这个怎么理解?看代码

c = {a = 1, b = 2}

c.foo = function(c) print(c.a,c.b) end

d = {}

d.foo2 = c.foo

d:foo2()

输出为:nil nil

解释下上面的代码:

首先创建一个table,然后定义一个函数foo,这个函数访问了table中的a和b两个变量

然后创建了另一个table,b

在b中定义一个变量foo2,赋值为c这个table中的foo函数

然后调用d这个table中的foo2函数,输出为nil nil

因为d是两个点调用的foo2,那么会自动吧d本身传入函数的第一个参数,那么函数的运行就是这样的:

function (d)

  print(d.a,d.b)

end

d这个table没有定义a和b两个变量,输入当然就是nil

 

像这种情况就只能一个点调用,显示的传入c这个table

d:foo2()改为d.foo2(c) 这样就可以了

输出1 2

 

上面的例子还可以这么写:

c = {a=1,b=2}

function c:foo()
  print(self.a,self.b)
end

d = {}

d.foo2 = c.foo

d.foo2(c)

 

转载于:https://www.cnblogs.com/xzxdm/p/6980267.html

你可能感兴趣的文章
LinkedList源码分析
查看>>
TF-IDF原理
查看>>
用JS制作博客页面背景随滚动渐变的效果
查看>>
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>
亲近用户—回归本质
查看>>
中文脏话识别的解决方案
查看>>
CSS之不常用但重要的样式总结
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>