在前面我们学习函数时,我们说过函数其实是值,我们可以将函数放在表中。
那么我们是不是可以这么做:
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 指针给函数。
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 指针给函数,那么就意味着我们可以方便的访问表的元素咯~
function fasty:Say2(arg) | |
print() | |
print("Say:"..arg.."\ta="..self.a) | |
end | |
fasty:Say2(200) |
总结
- 使用:声明函数时,函数会将第一个参数默认传递self指针。
- 如果使用.调用:声明的函数时,需要第一个参数传递self。:调用则不需要