1.多重赋值:

    在lua中可以多重赋值,和Python类似:

        a, b = 1, 2

    这样就能在函数中返回多个值了,并且lua的多重赋值更加智能,当值得个数多于变量的个数时,多余的值将被舍弃;

    当变量的个数多于值得个数时,多余的变量将被赋值为nil;Python中的多重赋值需要变量和值得个数对应

    如果在表达式中调用具有多重返回值的函数,只有函数在表达式的末尾时,表达式才能获取函数的所有结果,否则只能获取函数的第一个结果;

function test() 

 
return 1,2,3 

 

      end 

 

      

 

     a, b = test(), 4       ------a==1, b==4 

 

     a, b = 4, test()       ------a==4, b==1 

 

     a, b, c = 4, test()   ------a==4, b==1, c==2 (多余的值舍弃)

2.变长参数:

    lua中可以编写接受变长参数的函数,通过使用...来获取变长参数

    如:

function  add(...) 

 

              local sum = 0 

 
local args = {...}
 
ipairs(args)
 

                  sum = sum + v 

 

              end 

 

              return sum 

 

          end

当一个函数的参数只有一个table的构造式时,函数调用的小括号是可有可无的,上面的代码可改为:

function  add(...) 

 

          local sum = 0 

 
{...}
 

                  sum = sum + v 

 

          end 

 

          return sum 

 

      end

3.默认值参数:

    lua中的默认值参数不像其他语言那么方便,需要借助table来实现,如:

function   testArgs(arg) 

 

              old = arg.old  or  0 

 

              now = arg.now  or  0 

 

              if now > old then 

 

                  print("now bigger than old") 

 

             else 

 

                  print("now litter than old") 

 

              end 

 

      end

调用测试:

({})

{now=1}

深入函数:

    lua中函数名其实也是变量,函数的定义相当于赋值语句,

function  f(x)  return  2*x  end
 

       

 
f = function(x)  return  2*x  end

4.闭包closure:

    闭包就是在函数内部再定义一个函数,内部函数能够访问外部函数的局部变量,即时已经超出了外部函数的作用域;

相当于将外部函数的局部变量与内部函数绑定,使内部函数可以随意的访问,同时保留上一次访问的结果。

    如:

function  test() 
 
 
 

               local  i  =  0 
 
 
 

               function  _test() 
 
 
 

                       i  =  i  + 1 
 
 
 

                       return i 
 
 
 

               end 
 
 
 

               return _test 
 
 
 

           end

此时局部变量i就跟函数t绑定了,i就相当于函数t内的static变量

t()                 -- 1 
 
 
 

       t()                 -- 2 
 
 
 

       t()                 -- 3

5.非全局函数:

    lua中,函数其实是匿名的,通常定义的函数是将匿名函数赋值给变量,所以,定义局部函数同定义局部变量一样;

local  test 
 
 
 

       test = function (x, y)   return  x+y   end

    这样test就是一个局部函数了