数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
1.nil
nil表示一种没有任何有效值,属于的类型也是nil。
nil对于全局变量和table有一个“删除”的作用,将全局变量或者table表里的变量赋值nil就会将它删除:
table = {key1 = "val1", key2 = "val2"}
print("删除前:")
for k, v in pairs(table) do
print(k .. ":" .. v)
end
table["key1"] = nil
print("删除后:")
for k, v in pairs(table) do
print(k .. ":" .. v)
end
结果:
删除前:
key1:val1
key2:val2
删除后:
key2:val2
2.boolean
boolean类型只有两个值:true和false,在Lua中nil和false会视为“假”,其他都会视为“真”。
if false or nil then
print("false和nil中有一个真")
else
print("两个都为假")
end
结果:
两个都为假
3.number
其他语言中的int、float等类型到Lua中都统一视为number。
并且一下的写法都视为number:
print(12 + 1)
print("12" + 1)
print("12" + "1")
结果
13
13.0
13.0
用+连接的两字符串会被强制转换为number型,如果不能转换则会报错。
4.string
字符串,由单引号或者双引号来表示。
同时也可以使用“[[]]”来表示。
poetry = [[
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
]]
print(poetry)
在[[]]里的字符串想换行可以直接使用回车键,而不使用\n,但用单、双引号表示的字符串只能用\n表示换行。
多个string字符串希望连接使用的是..,如:
>print("Hello" .. "World")
HelloWorld
使用#来计算字符串的长度。
>print(#"Hello")
5
5.table
table的创建是通过“构造表达式”来完成,最简单的的构造表达式是{},表示创造了一个空表。
table的索引可以是字符串,同时也可以是数字。
table = {}
table["key1"] = "val1"
table[10] = "val2"
for k, v in pairs(table) do
print(k .. ":" .. v)
end
结果
key1:val1
10:val2
table的初始索引是从1开始的。
6.function
函数是被看作是“第一类值”,函数可以存在变量中:
function Sum(a, b)
return a + b
end
print(Sum(1, 2))
Sum2 = Sum
print(Sum2(2, 3))
结果
3
5
function可以以匿名函数的方式作为参数传递:
function Avg(tab, Count)
local sum = 0
for val in pairs(tab) do
sum = sum + val
end
return sum / Count(tab)
end
table = {1, 2, 3, 4, 5, 6, 7, 8}
print("平均数为:" .. Avg(table,
function (tab)
local count = 0
for i in pairs(tab) do
count = count + 1
end
return count
end
))
7.thread
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
8.userdata
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。