在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。
Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。
Lua 函数主要有两种用途:
print("====无参数的函数====");
function func1()
print("f1");
end
func1(); -- 从上到下执行,必须先声明函数再调用;
f2 = function()
print("f2");
end
f2();
print("====有参数的函数====");
-- lua中的函数参数不用定义类型,你传进去什么值就是什么类型
function f3(a)
print(a);
end
f3(1);
f3("789")
f3(true);
f3(); -- 如果不传参数默认是空的
function f4(a)
return a
end
b = f4(8);
print(b);
-- 对于多返回值的函数,可以在前面声明多个变量接取
-- 如果接取的变量不够,可以接取对应位置的返回值
-- 如果接取的变量多了,就赋值nil
function f5(a)
return a, "77", true
end
b, c, d = f5(8);
print(b);
print(c);
print("====函数重载====");
-- lua 中函数不支持重载,他只会调用最后一次声明的函数
print("====可变参数函数====");
function f6(...)
result = 0
local arg = {...} -- > arg 为一个表,局部变量
for i, v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. #arg .. " 个数")
return result / #arg
end
print("平均值为", f6(10, 5, 3, 4, 5, 6))
function f7(...)
local arr = {...};
for i = 1, #arr do
print(arr[i]);
end
end
f7(1, "asdf", true);
print("====函数嵌套====");
function f8()
return function()
print("f8");
end
end
f9=f8();
f9();
print("====函数闭包====");
function f10(a)
return function(b)
return a+b;
end
end
f11=f10(1);
print(f11(8));
print("=============数组================");
--所有的复杂类型都是table
a={1,8,5,"fd",true,nil,8,nil};
print(a[0]);--lua中索引是从1开始的
print(a[1]);
print(#a);--当表中最后的元素为nil的时候会被忽略掉
print("============数组的遍历============");
for i = 1, #a do
print(a[i]);
end
print("==========二维数组=============");
b={{1,2,3},{7,5,6},{4,0,6}};
print("===========二维数组的遍历============");
for i = 1, #b do
c=b[i];
for j = 1, #c do
print(c[j]);
end
end
print("============自定义索引============");
ff={[0]=5,"daf",[-1]=9,8,6};
print(ff[0])
print(#ff)--因为表长度的遍历是从1开始的我们定义了-1和0是遍历不到的
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。
在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
print("=====迭代器ipairs=====")
a={[0]=1,2,3,4,5,6,[-1]=1,9,[3]=8,[10]=99};
--[[
ipairs遍历是从1开始的小于等于0的值得不到
只能找到连续的索引键,如果中间断续就没办法遍历到后边的键值
]]
for i, v in ipairs(a) do
print("键"..i.."值"..v)
end
print("=====迭代器pairs=====")
--所有的键值都可以找到
for k, v in pairs(a) do
print("键"..k.."值"..v)
end