• lua 函数基础


    函数定义在前,调用在后

    如果函数只有一个实参,并且此参数是一个字面字符串或者table构造式,那么可以省略()

    例如

    print "hello"

    unpack{1,2}

    print [[ a multi

    line]]

    argument 与parameter对应

    实参多余形参,舍弃多余的实参

    少于形参,赋值为nil

    和多重赋值很像

    a,b=b,a,先计算右边,交换两个变量值

    多重返回值

    运用到了多重赋值

    function f() end--无返回值,但是也等于返回nil,占有一个位置

    function f1() return  "a" end --一个返回值

    function f2() return "a","b" end --返回两个结果

    多重返回值分为以下几种情况:

    1.作为单独语句,丢弃所有返回值

    例如 f2()

    2.作为表达式多个元素的非最后一个元素

    只保留第一个返回值

    3.作为表达式最后一个元素或者仅有一个元素

    获得所有返回值

    而表达式分为以下几种:

    1.多重赋值

    x,y=f2(),"c"--x="a",y="c",只保留第一个"a"

    x,y=f2()--x="a",y="b",仅有一个元素

    x,y,z="c",f2()--保留全部,因为是最后一个元素

    x,y=f(),"c","d"--x=nil,y="c",因为无返回值也占用一个nil

    2.函数调用传入实参列表

    函数调用作为最后一个实参,所有返回值传进去

    print(f2()) --a b

    作为非最后一个参数,保留第一个

    print(f2(),"c") --a c

    3.table构造式

    t={f2()} --所有的参数

    t={f2(),"c"} a,c

    4.return语句

    return f2() --返回所有

    5.其他

    放在一个圆括号中,迫使只返回一个结果

    print(( f2() ))

    f2()..1--返回a1

     变长参数

    但变长参数中有nil的时候可以考虑select

    function _test(...)
      local count=select("#",...)
      for i=1,count do
        v=select(i,...)--注意用多重赋值只取第一个值
    --    print(i,count,select(i,...))
        print(i,v)
      end
    end
    
    _test(3,4, 5)

    具名实参

    function rename(arg)
      print(arg.old,arg.new)
    end
    
    rename{old="temp.txt",new="temp1.txt"}
    rename({old="temp.txt",new="temp1.txt"})
  • 相关阅读:
    numpy数组(一)
    Iterator和Iterable区别:
    jupyter notebook安装相关问题
    Selenium+Headless Firefox配置
    最长不重复子串
    deprecated conversion from string constant to 'char*
    c++求字符串
    原型模式(Prototype)
    工厂方法模式(Factory Method)
    素数序列的生成及其应用(采用了自研的高效算法)
  • 原文地址:https://www.cnblogs.com/ptqueen/p/6761361.html
Copyright © 2020-2023  润新知