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

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)

Ps:也就是说一下函数是等效的:

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