Lua的数组、迭代器、table、模块

发布于:2025-08-14 ⋅ 阅读:(22) ⋅ 点赞:(0)

数组

数组:相同元素的集合。

索引用整数表示:从1开始。

print("------多维数组--------")

testArray2 = {} for i=1,3,1 do

testArray2[i]={}

for j=1,2,1 do

testArray2[i][j] = i*j

end

end

for i=1,3 do

for j=1,2 do

print(testArray2[i][j])

end

print("------") end

迭代器

泛型 for 迭代器
a = {"a","b","c"}
for k,v in pairs(a)
do
print(k,v)
end
a = {"a","b","c"}
for k,v in ipairs(a)
do
print(k,v)
end
pairs会遍历所有key和值。
ipairs:只会从1开始,步长是1,中间不是数字作为key的元素会被忽略,一直到第一个不连续的数
字索引为止(不含)。适合遍历数组。
for迭代器的结构:
for 变量列表 in 迭代函数 ,状态常量,控制变量
do
循环体
end
print("-------迭代器的定义例子--------")
-- 求平方 1-9的平方
function square(iteratorMaxCount,currentNumber)
if currentNumber < iteratorMaxCount then
currentNumber = currentNumber +1
if(currentNumber == 2) then
return nil,1
end
return currentNumber,currentNumber*currentNumber
end
endfor i,n in square ,9,0
do
print(i,n)
end

table:

a = {key1="a",key2="b"} 不能用nil做索引。
-- table
-- 初始化
myTable = {}
myTable[1] = "1" -- 删除
myTable = nil
print("--------------------") myTab = {}
print("myTab的类型是:"..type(myTab))

myTab[1]="1号元素"
myTab["a"]="a元素"

print("myTab[1]的元素是:"..myTab[1])
print("myTab['a']的元素是:"..myTab["a"]) -- 将myTab赋值
newMyTab = myTab;
print("newMyTab[1]的元素是:"..newMyTab[1])
print("newMyTab['a']的元素是:"..newMyTab["a"])

-- 修改元素
newMyTab["a"]="新值"
print("myTab['a']的元素是:"..myTab["a"])
print("newMyTab['a']的元素是:"..newMyTab["a"])

-- 置为nil
myTab = nil  print(myTab)
print("newMyTab[1]的元素是:"..newMyTab[1])
print("newMyTab['a']的元素是:"..newMyTab["a"])

模块

模块的定义

从lua5.1开始,引入了模块机制,把一些公用的代码放到文件中,通过api的方式,让其他程序调 用,这个文件,就是一个模块。

类似于java中的jar包。

lua中的模块,其实是一个table(由 变量、函数等已知的 lua元素组成)。最好在模块的结尾,需要 返回一个table。

如何编写模块

文件名:module.lua

-- 模块 :module.lua module = {}

module.constant = "模块中的常量"

function module.func1()

print("这是函数1") end

# 这块,注意 module不能写。

local function func2()

print("这是私有函数2")

end

function module.func3()

func2()

end

-- 返回表

return module

require函数

require("模块名")

require "模块名"

 

-- 调用模块

require("module")

print(module.constant) module.func3()