Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil(空)、number(数字)、string(字符串)、userdata(自定有类型)、function(函数)和table(表)。函数type可以测试给定变量或者值的类型。
- print(type("Hello world")) --> string
- print(type(10.4*3)) --> number
- print(type(print)) --> function
- print(type(type)) --> function
- print(type(nil)) --> nil
- print(type(type(X))) --> string
复制代码
最后一行将永远返回"string",而无关乎X这个值的内容。这是因为type函数总是返回一个字符串。
变量没有预定义的类型,每一个变量都可能包含任一种类型的值:
- print(type(a)) --> nil ('a' 尚未初始化)
- a = 10
- print(type(a)) --> number
- a = "a string!!"
- print(type(a)) --> string
- a = print -- 是的,这是合法的!
- a(type(a)) --> function
复制代码
请注意最后两行。在Lua中,函数是作为“第一类值(first-class value)”来看待的,可以像其他值一样来操作一个函数值(提前预习概念,后续再详细讨论)。
将一个变量用于不同类型,通常会导致混乱的代码,但有时明智地使用这种特性会带来便利。例如,在异常情况下,可以返回一个nil以区别于其他正常的返回值。
2.1、空值类型(nil)
Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。
2.2、数值类型(number)
表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的number可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替number,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
- 4 0.4 4.57e-3 0.3e12 5e+20
复制代码 |