5.lua学习笔记:函数

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 = {...}
            for k,  v in  ipairs(args)  do
                sum = sum + v
            end
            return sum
        end
当一个函数的参数只有一个table的构造式时,函数调用的小括号是可有可无的,上面的代码可改为:
    function  add(...)
        local sum = 0
        for  k,   v   in   ipairs {...}  do   --红色部分是个大括号+...
                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
调用测试:
testArgs ({})          --now litter than old
testArgs {now=1} --now bigger than old


深入函数:
    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

    t = test()       -- t == _test,  此时局部变量i就跟函数t绑定了,i就相当于函数t内的static变量
    t()                 -- 1
    t()                 -- 2
    t()                 -- 3

5.非全局函数:
    lua中,函数其实是匿名的,通常定义的函数是将匿名函数赋值给变量,所以,定义局部函数同定义局部变量一样;
    local  test
    test = function (x, y)   return  x+y   end
    这样test就是一个局部函数了






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值