• Lua函数之一


    LUA函数之一

    函数声明:

    function foo(arguments)
    
      statements
    
    end

    1、函数调用

    调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如:

    os.date()

    当函数只有一个参数并且这个参数是字符串或者table构造器的时候,可以省略函数调用操作符"()",例如:

    print "Hello World"
    
    dofile "a.lua"
    
    f{x=10,y=20}

    面向对象方式调用函数的语法,例如:

    obj::foo(x)   
    obj.foo(obj, x)

    实参和形参结合时,多余部分被忽略,不足补充nil,例如:

    function f(a,b) return a or b end
    
    f(3)          -- a=3, b=nil
    f(3,4)        -- a=3, b=4
    f(3,4,5)      -- a=3, b=4, 5 is discarded

    2、多返回值

    假设有3个函数:

    function foo0() end
    function foo1() return 'a' end
    function foo2() return 'a', 'b' end

    如果只想接收指定的返回值,可以使用哑元(dummy variable),例如:

    _,x = foo2()
    print(x)    -- 'b'

    另一种方式是使用select函数:

    select(index, ...),返回所有>=index的参数;当index='#',返回参数个数

    function foo3() return 'a', 'b', 'c' end
    print(select(1, foo3()))    -- a b c
    print(select(2, foo3()))    -- a b
    print(select(3, foo3()))    -- a
    print(select('#', foo3()))  -- 3

    在表达式中调用函数时:

    1、当函数调用作为表达式最后一个参数(或仅有一个参数)时,函数尽可能多地返回多个值,不足补nil,超出舍去;

    2、其他情况下,函数调用仅返回第一个值(如果没有返回值为nil);

    x,y=foo2()            -- x='a',y='b'
    x=foo2()              -- x='a', 'b' is discarded
    x,y,z=10,foo2()        -- x='10',y='a',z='b'
    x,y=foo0()             --x=nil,y=nil
    x,y=foo1()             -- x='a', y=nil
    x,y,z=foo2()           -- x='a', y='b',z=nil
    
    x,y=foo2(),20          --x='a',y=20 
    x,y=foo0(),20,30        -- x=nil,y=20, 30 is discarded
    x,y,z=foo0(),foo2()       -- x=nil,y='a',z='b'

    函数调用在table构造器中使用时:

    a = {foo0()}        -- a={}, a is empty
    a = {foo2()}        -- a={a,b}
    a = {foo0(),foo1(),foo2(),4}        -- a={nil,a,a,b,4}

    函数调用作为函数参数被使用时:

    print (foo0())      --
    print (foo1())      -- a
    print (foo2())      -- a b
    print (foo2() .. 'x')      -- ax

    可以使用圆括号"()"强制使调用只返回一个值:

    print ((foo0()))      -- nil
    print ((foo1()))      -- a
    print ((foo2()))      -- a

    unpack 函数接受一个数组作为输入参数,并返回数组的所有元素。

    a={"england",960,"china",30, x="america"}
    print(unpack(a))        -- england 960     china   30

    上面的print函数可以打印可变参数。

    2、可变参数

    在Lua中,使用 ... 表示可变参数,在函数中可变参数会存放在arg的一个table中,它有一个域n表示参数个数。

    function g(a,b,...)
        result = ""
        for i,v in ipairs(arg) do
            result = result .. tostring(v) .. '	'
        end
        result = result .. '
    '
    end 
    
    g(3)             -- a=3, b=nil, arg={n=0}
    g(3,4)           -- a=3, b=4, arg={n=0}
    g(3,4,5,8)       -- a=3, b=4, arg={5,8,n=2}

    如上面所示,Lua会将前面的实参传给固定参数,后面的实参放在arg表中。

      

  • 相关阅读:
    Django drf 功能组件
    Django drf 视图家族
    Django drf初级
    Django drf序列化器 Serializer
    VUE 全整理
    Django Xadmin的安装方式
    python virtualenv虚拟环境搭建
    版本控制器:操作流程
    版本控制器:GIT线上操作
    《剑指offer》---跳台阶问题
  • 原文地址:https://www.cnblogs.com/chenny7/p/3633821.html
Copyright © 2020-2023  润新知