-- 表
a = {} -- 可以混用存储
x = "name"
a[1] = 6 a[2] = 7 a[3] = 8 a[4] = 9 -- 数组 同前面(days = {"sunday","monday",tuseday})
a[x] = "tap4fun" a["age"] = 66 -- map 同前面(days = {x = 10,y = 9,"three" = 8})
a.x -- 获取方法1
a[x] -- 获取方法2
-- 遍历表
t = {10,print,x = 12,y = 14}
-- pairs 遍历集合的所有元素 不是顺序获取
for k, v in pairs(t) do
print(k,v)
end
-- ipairs 序号需要是整数 不能返回 nil 升序遍历
for k, v in ipairs(t) do
print(k,v)
end
-- #t 升序遍历
for k = 1, #t do
print(k,t[k])
end
table.insert(a,1,15) -- 开头添加15这个元素
table.insert(a,8) -- 末尾添加8这个元素
table.remove(a,1) -- 删除1这个位置元素
table.remove(a) -- 删除末尾元素
table.move(a,1,#a,2) -- 移动表a位置1到最后的元素到,2号位置后(相同表头添加了一个新位置)
table.move(a,2,#a,1) -- 整体向前移动一个位置(相当于删除第一个元素)
-- 函数
function showA(a)
return a "name"
end
s ,e = showA("hello") -- 返回多个参数
-- 可变传入参数
function add(...)
local s = 0 -- local 局部变量,仅在调用方法的时候使用
for _,v in ipairs(...) do
s = s + v
end
return s
end
print(select(1,"a","b","c")) -- 获取是可变参数位置1以后的所有参数(包括1)
print(select(3,"a","b","c")) -- 获取是可变参数位置3以后的所有参数(包括3) c
print(select("#","a","b","c")) -- 获取的是可变参数的长度
-- f(table.unpack(a)) 直接把a里面的元素变成传入的参数
m, n = table.unpack{10,20,30} -- unpack 返回数组内的所有元素 m = 10, n = 20 (30舍弃)
-- io 操作
-- [[
io.read(arges) == io.input()
io.write(arges) == io.output()
]]
local f = io.open(filename,"r") -- 开启对一个文件的io操作
local t = f:read("a") -- 读取整个文件
f:close() -- 关闭流
-- 控制结构
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
else
error("run error")
end
-- while
local i = 1
while a[i] do
print(a[i])
i = i + 1
end
-- 除了java常用的break,return.还有goto(打点,在逻辑中跳到你想要的位置重新运行)
while a[i] do
if i > 10 then goto s1
elseif i == 10 then goto s2
else goto continue
::s1::
i = i + 1
::s2::
i = i + 2
::continue::
end
-- repeat until(do while) 直到条件不满足 跳出
local line
repeat
line = io.read()
until line ~= ""
print(line)
-- #用于获取长度,字符串或者数组。(一般不用于表)
len = "www.runoob.com"
print(#len)
-- 变量值相互交换
x, y = y, x
-- nil 会判断是false,可以用于赋值表达式(从左到右,不为空的赋值进去)
local data = v1 or v2 or v3 or v4
--[[
赋值策略
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
]]
a, b, c = 0, 1
print(a,b,c)
a, b = a+1, b+1, b+2
print(a,b)
-- … 可变参数
--select('#', …) 返回可变参数的长度
--select(n, …) 用于返回 第n位置的参数
function foo(...)
for i = 1, select('#', ...) do -->获取参数总数
local arg = select(i, ...); -->读取参数
print("arg", arg);
end
end
foo(1, 2, 3, 4);
-- table 里的内容拼接在一起(fruits用,连接。只拼接第2-3位置的参数)
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))
-- 模块
-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
io.write("这是一个公有函数!\n")
end
local function func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module