Lua的数组、迭代器、table、模块
数组
数组:相同元素的集合。
索引用整数表示:从1开始。
print("------多维数组--------")testArray2 = {} for i=1,3,1 dotestArray2[i]={}for j=1,2,1 dotestArray2[i][j] = i*jendendfor i=1,3 dofor j=1,2 doprint(testArray2[i][j])endprint("------") 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")endfunction module.func3()func2()end-- 返回表return module
require函数
require("模块名")
require "模块名"
-- 调用模块
require("module")
print(module.constant) module.func3()