Lua数据类型
数据类型 | 描述 |
---|---|
nil | 只有值nil属于该类 表示一个无效值(在条件表达式中相当于false) |
boolean | 包含两个值 false和true |
number | 表示双精度类型的实浮点数 |
string | 字符串 由一对双引号或单引号来表示 |
function | 由C或lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 是一种用户自定义数据 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | 一个关联数组 键值对,数组的索引 可以是数字或者字符串 最简单的表达式是{ } |
简单的测试
--[[
多行注释
多行注释
]]--
-- 单行注释
print(type("hello"))
print(type(2))
print(type(type))
print(type(true))
print(type(nil))
print(type(x))
print(type(type(x)))
测试结果
string
number
function
boolean
nil
nil
string
nil(空)
nil 类型表示一种没有任何有效值 它只有一个值 nil
例如:打印一个没有赋值的变量便会输出nil
nil 有一种删除特性 给全局变量或者table 表中赋值nil 等同于删除
t1={key1="ball",key2="basketball"}
for k,v in pairs(t1) do
print(k.."-"..v)
end
t1.key1=nil
for k,v in pairs(t1) do
print(k.."-"..v)
end
结果:
key1-ball
key2-basketball
key2-basketball
nil做比较时,应该加上双引号 如:type(x)==“nil”
boolean(布尔)
boolean 类型只有两个可选值 true(值)和(false) Lua 把false和 nil 看作是假 其他都是真
print(type(true))
print(type(false))
print(type(nil))
if false or nil then
print("至少一个true")
else
print("false和nil 都是false")
end
结果:
boolean
boolean
nil
false和nil 都是false
number(数字)
Lua 默认只有一种 number类型–double(双精度)类型
print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(7.8263692594256e-06))
结果:
number
number
number
number
number
number
string (字符型)
字符串由一对双引号 或者单引号 来表示
str1="this is str1"
也可以用两个方括号 [[]] 来表示一块 字符串
html=[[
这是一段文字
]]
print(html)
在对一个数字字符串上进行算术操作,Lua 会尝试 将这个数字字符串转成 一个数字
print("20"+"10")
结果:30
字符串的连接符使用的是 …
使用 # 来计算字符串长度 放在字符串前面
table(表)
table 的创建时通过构造表达式来完成,最简单的构造表达是{},用来创建一个空表,
也可以在表里添加一些数据,直接初始化表:
local tbl1={}
local tal2={"apple","pear","orange","grape"}
数组的索引 可以是数字或者是字符串
a={}
a["key"]="value"
key1=10
a[key1]=20
for k,v in pairs(a) do
print(k.."-"..v)
end
结果:
key-value
10-20
lua里的表默认初始索引是1开始的。
lua 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的table 都是nil
fuction(函数)
递归
function facoriall(n)
if n==0 then
return 1
else
return n*facoriall(n-1)
end
end
print(facoriall(5))
结果 120
匿名函数方式
function testFun(tab,fun)
for k,v in pairs(tab) do
print(fun(k,v));
end
end
tab={"apple","orange"}
testFun(tab,function(key,val)
return key.."-"..val;
end
)
结果:
1-apple
2-orange
thread (线程)
在 lua 最主要得是协同程序(coroutine),它跟thread 差不多
主要区别 线程可以同时多个运行,协程 任意时刻只能 运行一个,并且处于运行状态的协程只有被挂起时才会暂停。
userdata(自定义类型)
一种用户自定义数据 通常(struct 和指针)存储到lua变量中调用