值与类型
Lua 是一种动态类型语言,变量不要类型定义,只需要为变量赋值。 所有的值都可以存储在变量中,作为参数传递到另一个函数中,并被函数作为结果返回
Lua中8个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table
| 数据类型 | 描述 |
|---|---|
| nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false) |
| boolean | 包含两个值:false和true |
| number | 表示双精度类型的实浮点数 |
| string | 字符串由一对双引号或单引号来表示 |
| function | 由 C 或 Lua 编写的函数 |
| userdata | 表示任意存储在变量中的C数据结构 |
| thread | 表示执行的独立线路,用于执行协同程序 |
| table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |

nil
nil 类型只有一种值nil,它主要用在表示与别的任何值的差异,通常,当需要描述一个无意义的值时会用到它。当给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉。
注:nil作比较时应该加上双引号""
boolean
boolean 类型只有两种值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 false,其他的都为 true,Lua中认为0和空字符串都为真
number
Lua 默认只有一种 number 类型 – double(双精度)类型。即Number只表示实数,Lua中没有整型
注:编译Lua时,可以使用长整数或者单精度浮点型代替数值类型(可以支持到小数点后15位数)
string
lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0.Lua中字符串是不可以修改的。同时,Lua可以高效处理长字符串,只需要用单引号或双引号表示即可。(可以用 2 个方括号 “[[]]” 来表示"一块"字符串)
注:当一个字符串使用算术操作符时,string就会被转成数字
如:
print("100"+"200")
300
print("100"+1)
101
print("100+00")
100+00
注:当Lua期望一个string而碰到数字时,会将数字转成string
如:
print("hello"..1.."world")
输出结果:
hello 1 world
注:…在Lua中表示字符串连接符,所以当在一个数字后面写…时,必须加上空格防止被解释错误。
如果需要将string转成数字可以使用tonumber()函数。可以调用tostring()函数将数字转成字符串。
如:
local n,s=111,"111"
print(type(n),type(s))
n,s=tostring(n),tonumber(s)
print(type(n),type(s))
输出结果:
number string
string number
注:使用 # 来计算字符串的长度,需要将其放在字符串前面
如:
len = "www.runoob.com"
print(#len)
输出结果:
14
print(#"www.runoob.com")
输出结果:
14
userdata
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用.Lua所有标准库都是用C实现的。标准库包括string库,table库,I/O库,OS库,算术库,debug库。
function
Lu可以调用lua或者C实现的函数,Lua所有标准库都是用C实现的。标准库包括string库,table库,I/O库,OS库,算术库,debug库。函数既可以存储在变量中,也可以作为函数的参数,同时,也可以作为函数的返回值
如:
function f1()
return true
end
local a=f1
local b=f1()
print(a)
print(b)
输出结果:
<font color=blue size=4>function: 0x913650
true</font>
thread
thread类型用来区别独立的执行线程
table
table可以以不同类型的值构成,它可以包含所有的类型的值(除nil外)。table是Lua中唯一的一种数据结构。table每个域中的值也可以是任何类型(除nil外),特别的,因为函数本身也是值,所以,table的域中也可以放函数。
注:table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表
如:
创建一个空的 table
local tbl1 = {}</font>
如:
直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}</font>
注:在 Lua 里表的默认初始索引以 1 开始
注:table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil
498

被折叠的 条评论
为什么被折叠?



