• 第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}

     

     

     

     

     

     

     

     

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    say goodbye to Heroku All In One
    Next.js Conf Ticket All In One
    如何在 macOS 上使用 iMovie 进行视频剪辑教程 All In One
    河流水质等级 All In One
    Leetcdoe 2037. 使每位学生都有座位的最少移动次数(可以,一次过)
    Leetcode 2190. 数组中紧跟 key 之后出现最频繁的数字(可以,一次过)
    Leetcode 2164. 对奇偶下标分别排序(可以,一次过)
    C++ std::function的用法
    利用torch.nn实现前馈神经网络解决 回归 任务
    pytorch 中 torch.nn.Linear() 详解
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4633853.html
Copyright © 2020-2023  润新知