	函数，在Lua中，函数的定义也很简单。典型的定义如下：

　　　　function add(a,b) -- add 是函数名字，a和b是参数名字

　　　　 return a+b -- return 用来返回函数的运行结果

　　　　end

 

　　　　请注意，return语言一定要写在end之前。假如你非要在中间放上一句return，那么请写成：do return end。

　　　还记得前面说过，函数也是变量类型吗？上面的函数定义，其实相当于：

　　　　add = function (a,b) return a+b end

　　　　当你重新给add赋值时，它就不再表示这个函数了。你甚至可以赋给add任意数据，包括nil （这样，你就清除了add变量）。Function是不是很象C语言的函数指针呢？

 

　　　　和C语言一样，Lua的函数可以接受可变参数个数，它同样是用"…"来定义的，比如：

　　　　function sum (a,b,…)

　　　　如果想取得…所代表的参数，可以在函数中访问arg局部变量（表类型）得到。

　　　　如 sum(1,2,3,4)

　　　　则，在函数中，a = 1, b = 2, arg = {3, 4}

　　　　更可贵的是，它可以同时返回多个结果，比如：

　　　　function s()

　　　　　　return 1,2,3,4

　　　　end

　　　　a,b,c,d = s() -- 此时，a = 1, b = 2, c = 3, d = 4

前面说过，表类型可以拥有任意类型的值，包括函数！因此，有一个很强大的特性是，拥有函数的表，哦，我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信？那我举例如下：

 

　　　　t =

　　　　{

　　　　 Age = 27

　　　　 add = function(self, n) self.Age = self.Age+n end

　　　　}

　　　　print(t.Age) -- 27

　　　　t.add(t, 10)

　　　　print(t.Age) -- 37

 

　　　　不过，t.add(t,10) 这一句实在是有点土对吧？没关系，在Lua中，你可以简写成：

　　　　t:add(10)   -- 相当于 t.add(t,10)