zoukankan      html  css  js  c++  java
  • 第5章 函数

    函数有两种用途:

    1.完成指定的任务,这种情况下函数作为调用语句使用;

    2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

      语法:

    function func_name (arguments-list)

       statements-list;

    end;

     

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

    print(8*9, 9/8)

    a = math.sin(3) + math.cos(10)

    print(os.date())

     

    上述规则有一个例外,当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()是可选的:

    print "Hello World"      <-->   print("Hello World")

    dofile 'a.lua'              <-->   dofile ('a.lua')

    print [[a multi-line        <-->   print([[a multi-line

               message]]                              message]])

    f{x=10, y=20}               <--> f({x=10, y=20})

    type{}                          <-->   type({})

    Lua也提供了面向对象方式调用函数的语法,比如o:foo(x)与o.foo(o, x)是等价的。Lua 使用的函数可以是 Lua 编写也可以是其他语言编写,对于 Lua 程序员来说用什 么语言实现的函数使用起来都一样。

     

     

    Lua 函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用 nil 补足。

    function f(a, b)

    return a or b

    end

     

    CALL       PARAMETERS

    f(3)
         a=3, b=nil

    f(3, 4)           a=3, b=4

    f(3,4,5)      a=3,b=4 (5isdiscarded)

    5.1 返回多个结果值


    Lua 函数可以返回多个结果值,比如 string.find,其返回匹配串“开始和结束的下标”(如果不存在匹配串返回 nil)。

    Lua 函数中,在 return 后列出要返回的值得列表即可返回多值,如:

    s, e = string.find("hello Lua users", "Lua")

    print(s, e)          --> 7 9

     

    Lua 函数中,在 return 后列出要返回的值得列表即可返回多值,如:

    function maximum (a)


    local mi = 1             -- maximum index

    local m = a[mi]          -- maximum value

    for i,val in ipairs(a) do

    if val > m then

              mi = i

    m = val

    end

    end

       return m, mi

    end

    print(maximum({8,10,23,12,5}))     --> 23 3

     

     

    5.2 可变参数

    Lua 函数可以接受可变数目的参数,和 C 语言类似在函数参数列表中使用三点(...) 表示函数有可变的参数。Lua 将函数的参数放在一个叫 arg 的表中,除了参数以外,arg 表中还有一个域 n 表示参数的个数。

    例如,我们可以重写 print 函数:

    printResult = ""

    function print(...)

       for i,v in ipairs(arg) do

           printResult = printResult .. tostring(v) .. " "

       end

       printResult = printResult .. " "

    end

     

     

    有时候我们可能需要几个固定参数加上可变参数

    function g (a, b, ...) end

    CALL          PARAMETER

    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}

     

     

     

     

     

     

     

     

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    蚂蚁金服合作的RISE实验室到底有多牛?
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    C++模板遇到iterator时候遇到的问题和解决方法
    C++模板遇到iterator时候遇到的问题和解决方法
    C++模板遇到iterator时候遇到的问题和解决方法
    $("div span")选取里的所有的元素
    ParseError: Unrecognised input. Possibly missing something
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4633853.html
Copyright © 2011-2022 走看看