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

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。:调用则不需要