Lua学习笔记2-数据类型

来源:互联网 发布:名校毕业生知乎 编辑:程序博客网 时间:2024/06/04 17:54

数据类型描述nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。boolean包含两个值:false和true。number表示双精度类型的实浮点数string字符串由一对双引号或单引号来表示function由 C 或 Lua 编写的函数userdata表示任意存储在变量中的C数据结构thread表示执行的独立线路,用于执行协同程序tableLua 中的表(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) doprint(k .. ":" .. v)endtable["key1"] = nilprint("删除后:")for k, v in pairs(table) doprint(k .. ":" .. v)end

结果:

删除前:key1:val1key2:val2删除后:key2:val2

2.boolean

boolean类型只有两个值:true和false,在Lua中nil和false会视为“假”,其他都会视为“真”。

if false or nil thenprint("false和nil中有一个真")elseprint("两个都为假")end
结果:

两个都为假

3.number

其他语言中的int、float等类型到Lua中都统一视为number。

并且一下的写法都视为number:

print(12 + 1)print("12" + 1)print("12" + "1")
结果

1313.013.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) doprint(k .. ":" .. v)end
结果

key1:val110:val2
table的初始索引是从1开始的。


6.function

函数是被看作是“第一类值”,函数可以存在变量中:

function Sum(a, b)return a + bendprint(Sum(1, 2))Sum2 = Sumprint(Sum2(2, 3))
结果

35
function可以以匿名函数的方式作为参数传递:

function Avg(tab, Count)local sum = 0for val in pairs(tab) dosum = sum + valendreturn sum / Count(tab)endtable = {1, 2, 3, 4, 5, 6, 7, 8}print("平均数为:" .. Avg(table, function (tab)local count = 0for i in pairs(tab) do count = count + 1endreturn countend))


7.thread

在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。


8.userdata

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。