Lua是一种动态类型的语言。在语言中没有类型定义的语法,每一个值都“携带”了它自身的类型信息。编程
在Lua中有8种基础类型:nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。能够经过自带的type函数返回其传入参数的类型名称。函数
print(type("hello world")) ---->string print(type(10.4*3)) ---->number print(type(print)) ---->function .... print(type(type(x))) ----->string :type函数老是返回一个字符串!
变量没有预约义的类型,任何变量均可以包含任何类型的值:测试
print(type(a)) --->nil(a 还没有初始化) a = 10 print(type(a)) --->number a = "string" print(type(a)) ---->string a = print 这里是把一个函数的引用赋值给变量a,a就表明这个函数。在Lua中,函数是做为“第一类值”来看待的,能够像操做其余值同样来操做一个函数值。 a(type(a)) ----->function
nil (空)lua
nil是一种类型,他只有一个值nil,它的主要功能是用于区别其余任何值。Lua将nil用于表示一种“无效值”的状况,既没有任何有效值的状况。spa
boolean(布尔)线程
boolean类型有两个可选值:false和true,这与传统的布尔值同样。然而boolean却不是一个条件值的惟一表示方式。在Lua中任何值均可以表示一个条件。Lua将值false和nil视为“假”,而降除此以外的其余值视为“真”。注意:Lua条件测试中,将数字零和空字符串也都视为“真”,code
number(数字)对象
number类型用于表示实数。Lua没有整数、浮点数等数量类型。Lua中的数字能够表示任何32位整数,而不会产生四舍五入的错误。书写一个数字常量时,可使用普通的写法,也可使用科学计数法,例如:内存
4 0.4 4.57e-3 0.3e12 5e+20
string(字符串)字符串
Lua中的字符串一般表示“一个字符序列”,能够将任意二进制数据存储到一个字符串中。
Lua中的字符串是不可变的值。不能直接修改字符串的某个字符,而是应该根据修改要求来建立一个新的字符串。
a = "one string" b = string.gsub(a, "one", "another") --->修改字符串的一部分,建立一个新的字符串b。 print(a) ----> one string print(b) -----> another string
Lua的字符串和其余Lua对象(Table或函数)同样,都是自动内存管理机制所管理的对象(无须担忧字符串的分配和释放)。
一个字符串能够小到包含一个字母,也能够达到包含整本书。Lua可以高效地处理长字符串。
字面字符串须要以一对匹配的单引号或双引号来界定。
a = 'a line' b = "another line" 根据编程风格,应该坚持在程序中使用相同类型的引号。
Lua中可使用转义字符还能够经过数值来指定字符串中的(特殊)字符,数值以转义序列“\<ddd>”给出,其中<ddd>是一个至多3个十进制数字组成的序列。
"alo\n123" 与 "\97lo \10\04923" 相同('a' 是97;'换行' 是10 ;'1' 是 49)
Lua中还可使用一对匹配的双方括号来界定一个字母字符串,就像写“块注释”那样。以这种方式书写的字符串能够延伸多行,Lua不会解释其中的转义序列。
若是,此类字符串的第一个字符是一个换行符,那么Lua会忽略它。这种状况在遇到可能包含已经被注释掉的代码,能够在两个左方括号间加上任意数量的等号
[====[,修改后字面字符串只有在遇到一个内嵌有相同数量等号的双右括号时才会结束,即]====]。
Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操做时,Lua会尝试将这个字符串转换成一个数字:
print("10" + 1) ---->11 print("10 + 1") ----->10 +1自己就是一个字符串 print("hello" + 1) ----->错误,不能转换。
在Lua指望一个字符串但却获得一个数字时,它也会将数字转换成字符串:
print(10 .. 20) --->1020此处打印出来的1020实质上是一个字符串。
在Lua中,“..”是字符串链接操做符。当直接在一个数字后面输入它时,必需要用一个空格来分割他们。
tonumber:显示地将一个字符串转换成数字。
tostring:将数字转成字符串(或者将该数字与一个空字符串相链接)
在Lua5.1中,能够在字符串前放置操做符“#”来得到该字符串的长度。
a = "hello" print(#a) -->5