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())