zoukankan      html  css  js  c++  java
  • 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表中。

      

  • 相关阅读:
    <Android 基础(二十六)> 渐变色圆角Button
    Java 中父类怎么调用子类的方法?
    <Android 基础(二十五)> Frame Animation
    Java基础知识点
    HTTP请求流程(二)----Telnet模拟HTTP请求
    telnet远程登录协议
    HTTP协议详解
    STM32 SPI接口的NSS引脚
    TCP/IP
    以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解
  • 原文地址:https://www.cnblogs.com/zhaolizhe/p/6923494.html
Copyright © 2011-2022 走看看