• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Lua中的函数浅析

    一、函数

    在lua中函数的调用方式和C语言基本相同。 如print(“hello world”), z=add(x+y)。唯一的差别是,如果函数只有一个参数,并且该参数是字符串或者table构造器,那么圆括号可以省略,如print “hello world”, f{x=10,y=10}。

    我对于table构造器的理解就是它本身就是一个构造函数或者是特殊化的结构体。

    lua为面向对象也提供了一个新的特殊语法--冒号操作符。表达式o.foo(o,x) 的另一种写法是o:foo(x)。

    复制代码 代码如下:

       function add(a)
          local sum=0
          for i,v in ipairs(a) do
             sum=sum+v
          end
          return sum
       end

    在以上声明中,包含了函数名(add),参数列表(a),以及函数体。需要说明的是,Lua中实参和形参的数量可以不一致,一旦出现这种情况,Lua的处理规则等同于多重赋值,即实参多于形参,多出的部分被忽略,如果相反,没有被初始化的形参的缺省值为nil。

    1、多重返回值

    复制代码 代码如下:

    function maximum(a)
       local pos=1
       local maxx=a[1]
       for i, v in ipairs(a) do
           if v>maxx then
           pos,maxx=i,v
           end
       end
       return pos,maxx
    end

    print(maximum( {1,5,2,7,3,6} ))
    --输出 4 7

    2、变长参数

    lua中同一个函数可以接受不同数量的参数(参数项为 ... )

    复制代码 代码如下:

    function add(...)
      sum=0
      for i,v in pairs{...} do
         sum=sum+v
      end
      return sum
    end


    function mul(a,b,...)
      sum=a*b
      for i,v in pairs{...} do
         sum=sum*v
      end
      return sum
    end

    print(add(1,2,3,4,5))
    print(add(1,2,3))
    print(mul(1,2,3,4,5))

    3、具名实参

    lua中允许将多个参数合并在一个table中,当做一个参数传入

    复制代码 代码如下:

    function foo(person)
      name=person.name
      age=person.age
      sex=person.sex
      ...
    end

    二、深入函数

    在lua中函数和其他所有值一样是匿名的,即它们没有名称,我们在操作的时候都在在操作该函数的变量。


    复制代码 代码如下:

    a = { p = print }
    a.p("Hello World")
    b = print
    b("Hello World")

    函数声明的方式:
    复制代码 代码如下:

    function foo(x) return 2*x  end

    foo=function(x) return 2*x end


    下面展示了匿名函数的方便性
    复制代码 代码如下:

    table.sort(tab,function(a,b) return a.idb.id end )

    1、closure函数(闭包函数)

    如果一个函数写入另一个函数内,那么这个处于内部的函数可以访问外部函数的局部变量。

    复制代码 代码如下:

    function newCounter()
        local i = 0   --"非局部变量",该变量可以被内部的匿名函数访问并操作
                       --其值可以用于下一次函数访问时计算
        return function() --匿名函数
            i = i + 1
            return i
        end
    end
    c1 = newCounter()
    c2=  newCounter()
    print(c1())
    print(c2()) --不同闭包的“非局部变量“是相互独立的
    print(c1())
    print(c2())
    --输出结果为:
    --1
    --1
    --2
    --2

    为了加深理解,再来看一个例子

    复制代码 代码如下:

    function power(x)
      return function(y) --该参数为闭包变量传入的参数
      return y^x
      end
    end

    power2=power(2) --power2,power3为闭包变量
    power3=power(3)
    print(power2(4))
    print(power3(5))
    --输出
    --16
    --125

    2、非全局函数

    复制代码 代码如下:

    Lib={}
    Lib.add=function(x,y) return x+y end
    Lib.sub=function(x,y) return x-y end
    function Lib.add(x,y) return x+y end
    function Lib.sub(x,y) return x-y end

    Lib={
          add=function(x,y) return x+y end
          sub=function(x,y) return x-y end
    }

    do
       local f=function(x,y) return x+y end
       ...
       f(4,5)
    end

    您可能感兴趣的文章:
    • Lua中调用函数使用点号和冒号的区别
    • Lua中的模块与module函数详解
    • Lua中的闭合函数、非全局函数与函数的尾调用详解
    上一篇:Lua中的常用函数库汇总
    下一篇:Lua中的迭代器和泛型for实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Lua中的函数浅析 Lua,中的,函数,浅析,Lua,中的,