zoukankan      html  css  js  c++  java
  • 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"})
  • 相关阅读:
    操作系统复习
    Google hack语法
    c++的set重载运算符
    华为笔试题
    Flume+Kafka整合
    kafka相关知识点总结
    kafka中生产者和消费者API
    Kafka集群环境搭建
    Storm消息容错机制(ack-fail机制)
    Storm通信机制(了解)
  • 原文地址:https://www.cnblogs.com/ptqueen/p/6761361.html
Copyright © 2011-2022 走看看