1. Background
2. Environment
修改环境变量
配置VSCode环境
cmd运行lua文件
cmd运行lua.exe CTRL+ C退出
3. Grammar
3.1 变量
动态类型;弱类型
大小写敏感;
默认全局;
带GC
3.2 类型
nil;boolean;number;string;function;userdate;thread;table
a = 123
print(a)
print(type(a))
--动态类型
a = "abc"
print(a)
print(type(a))
--大小写敏感
A = "cfj"
print(a)
--变量默认全局变量
local b = 456
3.3 语句
1、注释语句
--注释
--[[
多行
注释
]]
2、赋值语句
支持多变量赋值
--赋值
a,b = 123,"abc"
print(a)
print(b)
a,b = b,a
print(a)
print(b)
3、 顺序/分支/循环语句
if分支:false,nil - false / 0 - true
age = 12
if age > 18 then
print("work")
elseif age > 10 then
print("Study")
else
print("play")
end
print(type(age > 18))
for循环:起始,结束,步长
while循环
有break无cotinue
repeat until
--for
for i = 1, 10 , 2 do
print("i = ", i)
end
for i = 10, 1, -2 do
print("i = ", i)
end
--while
a = 1
while a < 10 do
print(a)
a = a + 2
end
--repeat until
a = 1
repeat
print(a)
a = a + 2
until a >= 10
4、小示例
ans = 15
repeat
print("guess the password(<100)")
a = tonumber(io.read())
if a == ans then
print("right!")
break
elseif a > ans then
print(a, "Big!")
else
print(a,"Small!")
end
until false
3.4 运算符
1、数学运算符
-- 数学运算
print(5 + 3)
print(5 * 3)
print(5 / 3)
print(5 // 3)
print(5 % 3)
print(5.5 % 3)
print(5 ^ 3)
--没有 ++ +=
2、关系运算符
--关系运算符
--< > >= <= == ~=
3、逻辑运算符
--逻辑运算符
--and or not
if age >18 and age < 70 then
print("work")
else
print("play")
end
if not (age > 70) then
print("young")
end
4、位运算符
5、其他运算符
# ..
--# 表示表长
--注意有一些未定义的情况
print(#{1,2,3})
print(#"{1,2,3}")
--..
-- 少使用
a = "abc"
b = "def"
c = a..b
print(c)
6、 短路求值
--and
a = true and false
b = false and 3
c = true and 3
print(a)
print(b)
print(c)
--result
false
false
3
--or
e = true or 111 + 222
f = false or 111 + 222
print(e)
print(f)
--result
true
333
--and + or 模拟三目运算符
age = 14
canVote = age > 18 and true or false
print(canVote)
--result
false
7、优先级与结合性
3.5 table基础
唯一的内置数据结构
1、定义与访问、
键值对,下标从1开始,nil不能作为键值
--定义
a = {}
b = {1,2,3,5,"a","b"}
c = {x = 123,y = 345}
--访问
print(a[1])
print(b[5])
print(c["x"])
--table["key"] > table.key
print(c.x)
--增加
a.z = 789
--嵌套
d = {pos = {z = 123}}
print(d.pos.z)
2、遍历
pairs ipairs
定义顺序与储存顺序不一定一致
--pairs
b = {1,2,3,5,"a","b", c = 23, d = 79}
for k,v in pairs(b) do
print(k," : ", v)
end
--result
1 : 1
2 : 2
3 : 3
4 : 5
5 : a
6 : b
d : 79
c : 23
--ipairs
b = {1,2,3,5,"a","b", c = 23, d = 79}
for k,v in ipairs(b) do
print(k," : ", v)
end
--result
1 : 1
2 : 2
3 : 3
4 : 5
5 : a
6 : b
3.6 函数
1、定义与调用
--定义
add = function (a,b)
return a + b
end
function sum(a,b)
return a + b
end
function fun1(a, b)
print(a)
print(b)
return a + b, a* b
end
r1,r2 = fun1(2,3,7)
print(r1,r2)
2、高阶函数
类似变量
--高阶函数 第一类 first class
function process(f, a, b)
print(f)
print(a)
print(b)
print(f(a,b))
end
process(add, 2,3)
process(fun1, 2, 3)
3、可变参数
--可变参数
--#
function add2(...)
local sum = 0
local arg = {...}
for k,v in ipairs(arg) do
sum = sum + v
end
return #arg, sum
end
print(add2(1,2,3,7,9,8))
function average(...)
local count, sum, temp = add2(...)
print(temp)
return sum/count
end
print(average(1,2,3,7,9,8))
3.7 函数库
1、string
--string
a = "abc"
b = "CFJ"
c = "abc\x41\ncjc\\cfj"
d = [[
long string
\n
\b \\
]]
print(string.upper(a))
print(b:lower())
2、table
--table
a = {1,2,1,3,7,9}
b = {2,4,6,8,2,5}
table.insert(a, 3, "a")
table.remove(a,2)
table.sort(b)
for k,v in pairs(a) do
print("k: ", v)
end
for k,v in pairs(b) do
print("k: ", v)
end
print(table.concat(a,"-",1,4))
模拟连接符..
--..
local t = {}
for line in io.lines() do
t[#t+1] = line
if #line <= 0 then
break
end
end
local s = table.concat(t,"+")
print(s)
3、math
--math
print(math.sin(math.pi/4))
math.randomseed(os.time())
for i = 1,10,2 do
print(math.random(1,10))
end