LuaForUnity4:Lua的函数

 

一、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

输出结果:

原创文章 1134 获赞 1439 访问量 61万+

猜你喜欢

转载自blog.csdn.net/Jaihk662/article/details/95239250