【LUA基础一本通】第二章:迭代器与模块

第二章:迭代器与模块

0. 导入

lua基础一本通 第二章:迭代器与模块

1. 迭代器

Lua 提供了两个迭代器,这两个迭代器通常会应用于泛型for循环中,用于遍历指定的table:

  1. pairs(table):会迭代整个table元素,无论是数组元素,还是key-value,先遍历数组,后输出key-value,但是内部不保证顺序。
  2. ipairs(table):仅会迭代指定table 中的数组元素,遇到nil停止

示例:

emp = {"bj", name = "sz", 23, 56, "sh", nil, "gz"}
for index, value in ipairs(emp) do
    io.write(value .. "   ")
end
print()
for key, value in pairs(emp) do
    io.write(emp[key] .. "   ")
end

输出:

bj   23   56   sh   
bj   23   56   sh   gz   sz

2. 模块

模块是Lua中特有的一种数据结构。
从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
模块文件主要由table组成。在table中添加相应的变量、函数,最后文件返回该table即可。如果其它文件中需要使用该模块,通过require将该模块导入
导入为 require 关键字,将指定的lua文件静态导入(合并为一个文件)。require()函数是有返回值的,返回的就是模块文件最后return的table。可使用一个变量接收该table值作为模块的别名,就可以使用别名来访问模块了;即使赋值,也可用原来的模块本身的名字:

require "rectangle"
-- or
rect = require "rectangle"

rectangle.lua

rectangle = {}

rectangle.pai = 3.14

function rectangle.perimeter(a, b)
    return (a + b) * 2
end

function rectangle.area(a, b)
    return a * b
end

-- 下面是一些全局变量/函数的定义,不建议这么玩
a = 123

local function area_b(r)
    return r * r * rectangle.pai
end

function fuc1(r)
    print("==== " .. area_b(r) .. " ====")
end

return rectangle

test.lua

rect = require "rectangle"

print(rect.pai)
print(rect.perimeter(2, 3))
print(rectangle.area(2, 3))    -- 两种写法都可以
print(a)
fuc1(1)

输出:

3.14
10
6
123
==== 3.14 ====
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值