zoukankan      html  css  js  c++  java
  • lua_自己对“lua函数”知识点的总结

    lua_自己对“lua函数”知识点的总结

    1.lua函数的定义

    --lua中,函数都是function类型的对象。(1)其可以被比较 (2)其可以赋值给一个对象(3)可以传递给函数(4)可以从函数中返回 (5)作为table表中的键
    函数的两种定义方式
    (1)function 函数名 (参数) (2) 函数名 = function(参数)
           函数内容             函数内容
                end                                      end

    --eg:
    function mathA()
    print("数学你好啊")
    end
    mathA()
    
    --定义一个带有参数的函数
    function mathAA(i)
    print(i)
    end
    do
    local ii = "数学你真的好难学"
    mathAA(ii)
    end

    2.接收多个参数,返回任意多个值

    --定义一个函数,他可以接收 任意多个参数 供其使用,一个函数可以在其结束的时候返回任意多个值
    -- return 关键字的作用就是在函数中返回某些值
        function 函数名 (参数)
          函数内容
        return 返回值
        end

    --eg:
    function hs (a,b)
    x = a*a
    y = b*b
    return x,y
    end
    i = 10
    j = 5
    d,c = hs(i,j)
    print(d..""..c)
    --对return关键字的使用
    function ys(i)
    if i == 7 then
    x = "你好啊,世界!"
    y = "我很好世界!"
    return x,y
    else
    z = "世界在向你问好"
    return z
    end
    end
    print(ys(8))
    -- 定义一个函数,传入两个参数并相加‘相减 ’相除‘相乘’取模 ,返回他们的运算结果,并输出到屏幕上
    function MathaB(a,b)
    c1 = a + b
    c2 = a - b
    c3 = a * b
    c4 = a / b
    c5 = a % b
    return c1,c2,c3,c4,c5
    end
    i = 5
    j = 4
    p1,p2,p3,p4,p5 = MathaB(i,j )
    print(p1)
    print(p2)
    print(p3)
    print(p4)
    print(p5)

    3.lua 中 函数的可变参数

    function x (...) --三个点表示函数的参数的个数不确定
    function x(a,b,...) --函数有两个固定的参数,其余参数不确定
    x(3) --a = 3,b = nil ,arg={n=0}
    x(3,4) --a = 3,b= 4 ,arg={n=0}
    x(3,4,5,8) -- a=3, b=4,arg={5,8;n=2}

    --定义一个函数,利用循环让这个函数能够计算 n 的阶乘
    test = function(n)
    local i = 1
    if n < 1 then --先进行一个判断
    n = 1
    end
    repeat
    i=n * i
    n = n-1
    until n == 0
    print(i)
    end
    print (test(5))

    4. select()函数

    -- select()函数 作用是允许你指定从第几个返回值开始取值。
    -- 此函数可以接收任意数目的参数,其中第一个参数用来决定函数的行为,
    -- 当第一个参数为 "#"时,select()简单返回其余参数的个数。
    -- 当第一个参数为一个数字时,select()返回其余从这个位置开始到最后一个参数

    print(select("#","a","b","c")) -- 3
    print(select(1,"a","b","c")) -- a b c
    print(select(2,"a","b","c")) -- b c

    5.函数的尾调用

    --当函数的最后返回结果是调用另一个函数,称之为尾调函数
    --lua中在调用尾调函数时,先是弹出当前函数的栈空间,然后在调用尾调函数,非常适用函数递归调用

    max_i = 20000
    function loop(i)
    if i>max_i then
    return i
    end
    i = i+1
    return loop(i)
    end
    print(loop(0))

    6.比较杂碎的相关知识

    --在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里

    function factorial1(n)
    if n == 0 then
    return 1
    else
    return n * factorial1(n - 1)
    end
    end
    print(factorial1(5)) --120
    factorial2 = factorial1 --这个地方应该是函数可以存在变量中
    print(factorial2(5)) --120
    --function 可以以 “匿名函数” 的方式通过参数传递
    function testFun(tab,fun)
    for k,v in pairs(tab) do
    print(fun(k,v))
    end
    end
    tab = {key1="val1",key2= "val2"}
    testFun(tab,function(key,val) --匿名函数
    return key.."="..val
    end)
    --key1=val1
    --key2=val2

    --函数的定义以end关键字结尾 。函数中的参数是局部变量 ,在调用结束时被收回
    --使用 ... 代替参数列表 ,lua会创建一个局部的名字为arg的table ,保存所有调用时传递的参数,以及参数的个数(通过arg.n获取)

    function threeDice()
    d1 = math.random(1,6) 
    d2 = math.random(1,6) 
    d3 = math.random(1,6) 
    d4 = math.random(1,6) 
    myTotal = d1+d2+d3+d4
    return d1,d2,d3,d4,myTotal
    end 
    print(threeDice())
    我们什么都没有,唯一的本钱就是青春。梦想让我与众不同,奋斗让我改变命运!
  • 相关阅读:
    Processing中PImage类和loadImage()、createImage()函数的相关解析
    基于Maxmspjitter的基础【pixel shader】绘制模板Patcher
    Processing多窗口程序范例(三)
    SpringBoot:基于注解的@CachePut
    Android开发—错误记录1:W/System.err: java.net.ConnectException: Connection refused
    自控力第一章-我要做,我不要,我想要:什么是意志力?为什么意志力至关重要
    超算结课小结
    linpack_2
    搭建Linpack
    汇编程序返回dos
  • 原文地址:https://www.cnblogs.com/mengmengxia/p/9232667.html
Copyright © 2011-2022 走看看