Lua-基础(五).和:的区别和联系

在前面我们学习函数时,我们说过函数其实是值,我们可以将函数放在表中。
那么我们是不是可以这么做:

1
2
3
4
5
6
7
8
local fasty={a=1}
function fasty.Say(arg)
print('Say:'..arg)
end

function fasty:Say2(arg)
print("Say:"..arg)
end

在这里,我们创建了一个表fasty,表中默认有a一个元素。然后我们给表创建了两个函数say和say2,这2个函数的作用都是将给与的参数输出。

调用不同

在我们调用这2个方法时,我们应该明确:

  • 使用.声明的方法使用.调用,使用:声明的方法使用调用
  • 假如我们要使用.调用:声明的方法,那我们需要传递一个this指针给函数
  • 也就是说: 其实是自动传递一个this指针给函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fasty.Say(100)
fasty:Say2(200)
fasty.Say2(fasty,200)
​```lua

<strong>Ps</strong>:也就是说一下函数是等效的:

​```lua
function fasty.Say3(self,arg)
print("say:"..arg)
end

function fasty:Say4(arg)
print("say:"..arg)
end

self指针

既然,:的形式是自动传递一个self指针给函数,那么就意味着我们可以方便的访问表的元素咯~

1
2
3
4
5
function fasty:Say2(arg)
print()
print("Say:"..arg.."\ta="..self.a)
end
fasty:Say2(200)

总结

  • 使用:声明函数时,函数会将第一个参数默认传递self指针。
  • 如果使用.调用:声明的函数时,需要第一个参数传递self。:调用则不需要