一、Lua中的类型与值

来源:互联网 发布:深圳爱玩网络 编辑:程序博客网 时间:2024/05/01 15:36

Lua中的类型与值|果冻想

本文是对于“果冻想”的《Lua入门系列》所作笔记,原文来自上面链接。

基础介绍

Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都带有其自身的类型信息。在Lua中有8种基本类型,分别是:
1. nil 
2. boolean
3. number 
4. string
5. userdata (自定义类型)
6. function (函数类型)
7. thread  (线程)类型
8. table (表)类型
我们可以使用type函数,判断一个值的类型,type函数返回一个对应类型的字符串描述。例如:

  1. local nilValue = nil
  2. local bValue = true
  3. local nValue = 1
  4. local strValue = "1"
  5. local tbValue = {}
  6. print(type(nilValue))-- nil
  7. --省略

nil

nil是一种类型,它只有一个值nil。一个变量在第一次赋值前的默认值就是nil。

boolean

boolean类型有两个可选择:false和true。在lua中只有false和nil是“假”的,除此之外都“真”。

string

Lua字符串是不可变的值。当字符串多行存在是,可以使用“[[]]”符号来界定一个多行字符串,同时,Lua不会解析其中的转义序列。例如:
  1. local page = [[
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>xxxx</title>
  5. </head>
  6. <body>
  7. </body>
  8. </html>
  9. ]]
  10. print(page)

table

在Lua中,table既不是“值”,也不是“变量”,而是对象。可以将table想象成一种动态分配的对象,程序中仅仅有一个对它们的引用(指针)。
  1. local a = {} -- 创建一个table,并将它的引用存储在a
  2. a.x = 10
  3. local b = a -- ba引用同一个table
  4. print(b.x)--10
  5. b.x = 20
  6. print(a.x)--20
  7. b = nil -- 现在只有a还在引用table
  8. -- 错误:print(b["x"])
  9. print(a.x)--20
  10. a = nil -- 现在不存在对table的引用
当对一个table的引用个数为0时,Lua的垃圾收集器最终会删除该table,并释放它所占用的内存空间。
在Lua 5.1中,长度操作符“#”用于返回一个数组或线性表的最后一个索引值。
  1. local a = {}
  2. a[1000] = 1
  3. print(#a)-- 0
在Lua中,对于所有未初始化的元素的索引结果都是nil。Lua将nil作为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操作符会认为这些nil元素就是结尾标记。因为a[1] = nil,所以,对于上述代码的输出应该是0。所以,在处理table的时候,需要考虑这个问题。那么对于含有nil的table,如何获取它的长度呢?我们可以使用table.maxn,它将返回一个table的最大正索引数,如下所示:
  1. local a = {}
  2. a[1000] = 1
  3. print(table.maxn(a)) -->1000

function

在Lua中,函数被当做值来对待,这表示函数可以存储在变量中,可以通过参数传递给其它函数,还可以作为其它函数的返回值。Lua既可以调用自身Lua语言编写的函数,又可以调用以C语言编写的函数。Lua所有的标准库都是用C语言写的。

userdata和thread

userdata用于表示一种由应用程序或C语言库所创建的新类型。由于userdata类型可以将任意的C语言数据存储到Lua变量中。在Lua中,这种类型没有太多的预定义操作,只能进行赋值和相等性测试。
thread主要用于“协同程序”。
0 0
原创粉丝点击