zoukankan      html  css  js  c++  java
  • Lua学习---函数定义

    1.函数定义的格式:

    Lua使用function定义函数,语法如下:

      function function_name (arc)    --arc表示参数列表,函数的参数列表可以为空

        --body

      end

    上面的语法等价于:

      function_name function_name (arc)

        --body

      end_

    上面的方法都是定义了一个全局函数,为了不污染命名空间,同时减少性能损耗,我们应该尽量使用“局部函数”,方法如下(只需要再前面加local声明即可):

      local function function_name (arc)    --arc表示参数列表,函数的参数列表可以为空

        --body

      end

    注意:Lua函数的本质是变量赋值,所以再使用函数之前,一定要先定义函数(C语言可以再后面定义,前面声明,但是Lua没有声明,只有定义)

      由于函数定义等价于变量赋值,也就可以把函数名替换为Lua某个表的字段,如:

    function Foo.bar(a, b,	c)  --此时不能再加local函数声明了
    end
    

     2.函数参数

    1)Lua函数的参数大部分是按值传递的。

    函数传参的几个规则:

      a、若参数个数大于形参个数,从左向右,多余的实参被忽略

      b、若实参个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil

      c、Lua还支持变长参数。用...表示。此时访问参数也要用...,如:

    local function	func(...)	--形参为	...	,表示函数采用变长参数
      local temp	= {...}	 --访问的时候也要使用	...
      local ans	= table.concat(temp,	"") --使用table.concat库函数,对数组内容使用"	"拼接成字符串。
    			print(ans)
    end
    func(1,	2) --传递了两个参数
    func(1,	2, 3, 4) --传递了四个参数
    -->output
    1 2
    1 2 3	4
    

    2)当函数参数是table类型时,传递进来的实际上是实际参数的引用。如具名函数

    3.函数的返回值

    Lua函数允许返回多个值,返回多个值时,中间用逗号隔开

    函数返回值的规则:

      1)若返回值个数大于接收变量的个数,多余的返回值会被忽略掉;

      2)若返回值个数小于参数个数,从左向右,没有被返回值初始化的变量会被初始化为nil

    函数返回值与表达式:

      1)当一个函数返回一个以上的返回值,且函数调用不是一个列表表达式的最后一个元素,那么函数只返回第一个返回值,如:

      

    local function init()	--init函数返回两个值 1和"lua"
      return 1, "lua"
    end
    local	x, y,	z = init(), 2 --init函数的位置不在最后,此时只返回	1
    print(x, y, z)			-->output 1 2 nil
    local	a, b, c = 2,	init()		--init函数的位置在最后,此时返回 1 和 "lua"
    print(a, b, c)			-->output 2 1	lua
    

      2)如果你确保只取函数返回值的第一个值,可以使用括号运算符,例如:

      

    local function init()
      return 1, "lua"
    end
    print((init()),	2) -->output 1	 2
    print(2, (init())) -->output 2 1
    

      

  • 相关阅读:
    phpstorm使用svn爆出“cannot load supported formats” 的解决
    本地wamp的Internal Server Error错误解决方法
    mac下apache的多站点配置
    Git 一些错误的解决方法
    【总结整理】登录模块---摘自《人人都是产品经理》
    【总结整理】产品经理优秀品质----《结网》
    【总结整理】传统行业如何合理利用互联网思维----摘自《人人都是产品经理》
    【总结整理】租房产品创业的三个方向和三个产品---摘自《人人都是产品经理》
    【总结整理】KANO 模型
    【总结整理】关于GrowingIO、友盟、google analysis等数据分析
  • 原文地址:https://www.cnblogs.com/y-yxh/p/6264232.html
Copyright © 2011-2022 走看看