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 (空)
nil是一种类型,他只有一个值nil,它的主要功能是用于区别其他任何值。Lua将nil用于表示一种“无效值”的情况,既没有任何有效值的情况。
boolean(布尔)
boolean类型有两个可选值:false和true,这与传统的布尔值一样。然而boolean却不是一个条件值的唯一表示方式。在Lua中任何值都可以表示一个条件。Lua将值false和nil视为“假”,而降除此之外的其他值视为“真”。注意:Lua条件测试中,将数字零和空字符串也都视为“真”,
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