Lua是一种动态类型的语言。
在Lua中有8种基础类型:nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。
print(type("Hello World") -->string print(type(10.2*3)) -->number print(type(print)) -->function print(type(type)) -->function print(type(true)) -->boolean print(type(nil)) -->nil print(type(type(x))) -->string,与x无关,因为type函数总是返回一个字符串 print(type(a)) -->nil,因为a尚未初始化
a = print -->这是合法的! a(type(a)) -->function
Lua的字符串和其他Lua对象一样,都是自动内存管理机制所管理的对象。这表示无须担心字符串的分配和释放。
Lua字符串中的转义序列:
\a -->响铃 \b -->退格 \f -->提供表格 \n -->换行 \r -->回车 \t -->水平tab \v -->垂直tab \\ -->反斜杠 \" -->双引号
另外,还可以用一对匹配的双方括号来界定一个字母字符串,以这种形式书写的字符串可以延伸多行,Lua不会解释其中的转义序列。例如:
page = [[ ... ... ]]
Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操作时,Lua会尝试将这个字符串转换成一个数字:
print("10" + 1) -->11 print("hello" + 1) --错误,不能转换"hello"
在Lua中," .. "时字符串连接操作符,当直接在一个数字后面输入它的时候,必须要用一个空格来分隔它们,不然,Lua会将第一个点理解为一个小数点,可以利用这个特性将数字转换成字符串(最好不要用):
print(10 ..20) -->1020
line = io.read() -->读取一行 n = tonumber(line) -->尝试将它转换为一个数字 print(tostring(10) == "10") -->将一个数字转换成字符串
在Lua 5.1中,可以在字符串前放置操作符”#“来获得该字符串的长度:
a = "Hello" print(#a) -->5 print(#"World") -->5
table(表)类型实现了“关联数组”,“关联数组“是一种具有特殊索引方式的数组。table没有固定大小,可以动态地添加任意数量的元素到一个table中。它可以表示普通数组、符号表(symbol table)、集合、记录、队列和其他数据结构。在Lua中,table既不是”值“,也不是”变量“,而是”对象“。
a = {} -->创建一个table,并将它的引用存储到a k = "x" a[k] = 10 -->新条目,key="x",value=10 a[20] = "great" -->新条目,key=20,value="great" print(a["x"]) -->10 k = 20 print(a[k]) -->"great" a["x"] = a["x"] + 1 -->递增条目"x" print(a["x"]) -->11
a = {} a["x"] = 10 b = a -->b与a引用了同一个table print(b["x"]) -->10 b["x"] = 20 print(a["x"]) -->20 a = nil -->现在只有b还在引用table b = nil -->再也没有对table的引用了
a.x = 10 -->等同于a["x"] = 10 print(a.x) -->等同于print(a["x"])
在Lua中,数组通常以1作为索引的起始值。长度操作符"#"用于返回一个数组或线性表的最后一个索引值(或为其大小),例如:
--打印所有的行 for i=1, #a do print(a[i]) end
在Lua中,函数(function)是作为“第一类值”来看待的。这表示函数可以储存在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。
a = "Jacedy" print("I'm " ..a) a = 10 print("a is " ..a)