基本数据类型
Lua
是一门动态类型语言,有8种基本数据类型,nil
、boolean
、number
、string
、userdata
(自定义)、function
、thread
(线程)、table
(表),函数type
可以根据一个值返回其类型名称。
print(type("hello world")) -- string
print(type(10.2*3)) -- number
print(type(true)) -- boolean
print(type(print)) -- function
print(type(nil)) -- nil
print(type(type(x))) -- string,因为type函数一定是返回字符串,所以返回string
Lua中变量没有预定义的类型,任何变量都可以包含任何类型的值,比如:
print(type(a)) -- nil,没有赋初值的变量,为nil
a = 10
print(type(a)) -- number
a = print
print(type(a)) -- function,这种写法在Lua中是合法的
注意:
nil 是一种数据类型,只有一个值”nil
“,它的主要功能用去区分其他任何值。Lua
将nil用于表示一种“无效值(non-value
)”的情况,即没有任何有效值的情况,全局变量在赋初值前为nil,将nil赋值给一个全局变量,将相当于删除该全局变量。
boolean 将nil
和false
都视为假,其他值都是为真,0和空字符串也视为真。
string Lua中的字符串时不可变的值(immutable values
),不能像c语言那样直接修改字符串的值或字符串中的某个字符,而是应该根据修改要求创建一个新的字符串。
a = "one string"
b = string.gsub(a, "one", "another") -- b is "another string"
table 是Lua中的主要数据结构机制,也是唯一的。table
是一种“关联数组”,可以通过整数、字符串或者其他类型的值来索引(除了 nil)。table
没有固定大小,可以动态的添加任意数量的元素到table中。
table中有一个长度操作符“#”,用于返回一个数组或者线性表的最后一个索引值,在lua中,table的开始下表是从 1 开始的,这点与C语言等从 0 开始不同。
--打印所有的行
for i=1, #a do
print(a[i])
end
print(a[#a]) -- 打印列表a的最后一个值
a[#a] = nil -- 删