记录学习过程
创建日期:2019-04-14
数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
使用type函数返回数据类型
print(type(“Hello World”)) --string
print(type(print)) --function
nil
print(type(a))
boolean(布尔)
print(type(true)) --boolean
number(数字)
print(type(2))
print(type(2.2))
print(2e+2) -- 2*10的2次方
string(字符串)
str = “haha”
可以用”[[ ]]”表示多行字符串(类似C#的@” ”)
strs=
[[
str1
str2
]]
字符串拼接
print("2".."4") --24
也可以
print(2 .."4") --24 (注意第一个字符串后面要空格)
运算
print("2"+"4") -- 6 字符串转成number进行加法运算
print("a"+2) --报错,a 无法转成number
print(“2+4”) -- 2+4
用#来计算字符串的长度
print(#"Hello") --5
print(#"哈哈") --4 中文的字符都占2个字节
strs=
[[
dd
]]
print(#strs) --3 可知空格也占用一个字节
table(表)
表的值可以为任意类型
tab1={}--空表
tab2 = {key1 = 100,key2 = "Value2"}
key3 = "key3"
tab2[key3]="Value3"--添加表数据
key4 = "key4"
tab2[key4]="Value4"
print(tab2["key1"])--通过key访问表数据
print(tab2[key3])--访问表数据
print(tab2.key3)
tab3={"a","d","c"}
print(tab3[1])--通过索引访问表数据,table的索引从1开始
print("table遍历")
if tab3 ~= nil then --如果table 为nil,遍历table是会出错
for key,val in pairs(tab3) do
print(key.. ":"..val)
end
end
--1:a
--2:d
--3:c
--pairs与ipairs的区别
--pairs的遍历是随机的,但是一定会遍历整个表,先访问索引值,再访问哈希值
--ipairs遍历从1开始,索引断开或下个索引不存在遍历都会终止
function(函数)
函数的定义和使用
function fact(n)--数的阶乘,递归
if n==1 then
return n
else
return n*fact(n-1)
end
end
fact2= fact
print(fact2(5)) --120
print(type(fact))
function作为参数传递和匿名函数
tab = {key1="value1",key2="value2"}
function ergodicFun(tab,fun)--遍历
for k,v in pairs(tab) do
fun(k,v)
end
end
function printKV(k,v)
print(k..":"..v)
end
ergodicFun(tab,printKV)--function作为参数
ergodicFun(tab,
function(k,v) --匿名函数,函数只使用一次
print(k..":"..v)
end
)