Lua 基本语法学习笔记(二)

函数

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua 函数主要有两种用途:

  • 1.完成指定的任务,这种情况下函数作为调用语句使用;
  • 2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
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

你可能感兴趣的:(Lua,lua)