lua
1. Lua特点
动态类型,弱类型. 大小写敏感
动态类型:不需要变量类型即可声明变量
弱类型: 可对一个变量赋不同得值.
数据类型 : nil
(空),boolean
,number
,string
,function
,userdata
,thread
,table
2. 语法
1. 注释
-- 行注释:
-- a = 123
-- 段注释
--[[
a = 123
]]
-- 多级注释
--[[
a = 123
[=[
a = 123
]=]
]]
2. 条件语句
she = "WL"
if she == "WL" then
print("She ~!")
elseif she == "xxx" then
print("She is ?")
else
print("Where is she")
end
if…then elseif then else end
false 可以是判断条件== false
,nil
[!NOte]
如,
if(abc)
,abc
为未赋值变量,则等同于false
3. 循环
三种循环,没有continue关键字,有break。
1. for
一般for循环
for i=1,10,2 do
print(i)
end
for startIndex,endValue,stepLength do end
遍历循环
table 可跳转至
a = {
1,
2,
pos = {
x = 1,
y = 2,
z = 0
},
34,
"a",
"b",
x = "how are you",
aa = false,
323
}
for i, v in ipairs(a) do
print(i,":", v)
end
print("-----------------")
for k, v in pairs(a) do
if type(v) == 'table' then
for kk, vv in pairs(v) do
print("",kk,":", vv)
end
else
print(k,":", v)
end
end
--[[ 输出
1 : 1
2 : 2
3 : 34
4 : a
5 : b
6 : 323
-----------------
1 : 1
2 : 2
3 : 34
4 : a
5 : b
6 : 323
x : how are you
x : 1
z : 0
y : 2
aa : false
]]
[!NOTE]
从中可以看出。table的存储按顺序但不是完全按照顺序。即,所有未指定键名的值按照顺序存储,键名依次递增。
制定键名的值按特定规则,非顺序存储
而且,ipairs
循环只遍历没有指定键值的元素。pairs
则遍历所有元素。
2. while
a =1;
while a<100 do
a= a * 2
if a > 50 then
break
end
print("a" , a)
end
--[[ 输出
a 2
a 4
a 8
a 16
a 32
]]
[!NOTE]
注意
end
与if
、while
一一对应。
3. repeat until
a = 100;
repeat
a= a//2
print(a)
until a<5
--[[输出
50
25
12
6
3
]]
[!NOTE]
死循环的循环语句。直到条件才结束。或者 使用
break
提前结束。
4.运算
多数运算与其他语言相同。
1. 常用数字运算
除了 /,^
a = 5/2 -- 输出2.5 ,除
a = 5//2 -- 输出 2 ,整除
a = 5^3 -- 输出125 ,阶乘
另外 没有 ++,--,+=,-= 等
运算
2. 逻辑运算
判断符号为 >, <, >=, <=, == , ~=
最后一个为不等于
逻辑运算符 and ,or ,not
.三个运算符和组合。
[!NOTE]
and
优先级大于or
a = 100
if not (a ~= 100) then
print("good num")
else
print("bed num")
end
-- 输出 good num
5. 数据结构
1. table
table相当于C#中的字典,每个元素都是键值对。如果没有注定键,则第一个从1开始,设置默认键名。
a = {1, 2, 34, "a", "b", x = "how are you", y = false}
print(a[1])
print(a.x)
print(a["x"])
print(a[3])
--[[输出
1
how are you
how are you
34
]]
6. 函数
local add = function(a,b)
return a+b
end
local swapNum = function(a,b)
return b,a
end
function addPlus(...)
local args= {...}
sum=0;
for k, v in pairs(args) do
sum = sum + v
end
return args,"---", #args, "----", sum
end
print(add(10,20))
print(swapNum(10,20))
print(addPlus(11,2,3,4,5,6,7,8,9,10))
--[[ 输出
30
20 10
table: 00000000001ea020 --- 10 ---- 65
]]
7. 特殊运算符
#
取长度 。有坑。如下,自行体会
a = {x="x",1,2,3,4,nil,5,nil}
b = {x="x",1,2,3,4,nil,5,6}
c = "aaaa"
print(#a)
print(#b)
print(#c)
b[7]= nil
print(#b)
--[[ 输出
4
7
4
4
]]
..
连接符
a= "abc"
d= "def"
g="ghi"
c = a..d..g
print(c)
--[[输出
abcdefghi
]]