数组
数组:相同元素的集合。
索引用整数表示:从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()