一、Lua的函数
代码中有注释
一些重点:
- Lua的函数可以返回多个结果,你可以将它们赋值给数组
- function 函数名(...):函数传入可变参数
- select("#", ...):求出可变参数的参数数量
- 在Lua中无论在哪里申请变量,都算作全局变量,只要没有用local关键字
print("----------------------------------------------------------")
local function max(num1, num2) --num1, num2为函数的参数,locol表示当前函数为局部函数,缺省的话默认为全局函数
if (num1 > num2) then
result = num1;
else
result = num2;
end
return "输出结果:", result --Lua的函数可以返回多个值,它们用逗号隔开
end
-- 调用函数
print(max(10,4))
range = {max(5, 6)} --将函数返回的多个值按顺序存入数组中
print(range[1])
print(range[2])
print("----------------------------------------------------------")
function add(num1, num2, maxfunction) --函数作为参数传递
range = {maxfunction(num1, num2)} --如果这里不打上大括号(作为数组),那么result只能获得函数返回的第一个值,12行同
result = "最大值" .. range[1] .. range[2] --在Lua中无论在哪里申请变量,都算作全局变量,只要没有用local关键字
return result
end
print(add(100, 500, max))
print("----------------------------------------------------------")
function count(...) --可变长度参数,也就是说参数数量可以不确定
local sum = 0 --局部变量
for i, v in ipairs{...} do --暴力传入的所有参数,求和
sum = sum + v;
end
return sum
end
print(count(5, 6, 7, 8, 9))
print("----------------------------------------------------------")
fun = {} --另一种定义函数的方式:将函数作为一个value
fun.average = function(dir, ...) --固定参数 + 可变参数传法,求平均数*dir
local sum = 0
for i, v in ipairs{...} do --暴力传入的所有参数,求和
sum = sum + v;
end
result = sum * dir;
result = result / select("#", ...) -- select("#", ...):求出可变参数的参数数量
return result
end
print(fun.average(100, 5, 6, 7, 8, 9))
print("----------------------------------------------------------")
range = {[2] = "v2", [1] = "v1", [4] = "v4"}
for k, v in ipairs(range) do
print(k, v)
end
print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
for k, v in pairs(range) do
print(k, v)
end
二、pairs 和 ipairs 的区别
- pairs:会遍历 table 中所有的 key-value
- ipairs:根据 key 的值从1开始遍历,遇到 nil 就结束
运行一下下面的代码就秒懂了
range = {[2] = "v2", [1] = "v1", [4] = "v4"}
for k, v in ipairs(range) do
print(k, v)
end
print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
for k, v in pairs(range) do
print(k, v)
end
输出结果: