第二章 类型与值 Lua程序设计第二版笔记

Posted LeoSirius

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章 类型与值 Lua程序设计第二版笔记相关的知识,希望对你有一定的参考价值。

--第二章 类型与值
Lua是动态类型的语言,在语言中没有类型定义的语法,每个值都带有它自身的类型信息。
8种基础类型:nil boolean number string userdata function thread table

--2.1nil
--2.2boolean
Lua将false和nil都视为假,除此之外都是真,包括数字零和空字符串。

--2.3number
number表示双精度浮点数。通过重新编译Lua也可以使用其他类型来表示数字,具体做法见luaconf.h文件

--2.4string
字符串是不可变的值,不能像C中直接修改字符串中的某个字符,而是应该根据修改要求来创建一个新的字符串。

a = "one string"
b = string.gsub(a, "one", "another")
print(a) --> one string
print(b) --> another string

 

Lua的字符串和其他Lua对象(table或函数)一样,都是自动内存管理机制所管理的对象。

Lua提供了字符串和数字的自动转换

print("10" + 1)  --> 11
print("10+1")  --> 10+1
print(10 .. 20)  -->1020  (注意..接的后面的数字之间要空一格,不然第二个点会理解成小数点)

但是不推荐使用自动转换,推荐使用tonumber()和tostring()两个方法

--2.5table
Lua通过table来表示module、package、object。
table既不是值,也不是变量,而是对象。可以将table想象成一种动态分配的对象,程序仅持有一个对他们的引用。
table不能声明,而是通过构造表达式{}来创建。
table永远是匿名的,一个持有table的变量和table自身之间没有固定的关联性。
当一个程序再也没有对一个table引用时,Lua的GC最终会删除该table,并复用它的内存。

把table作为数组使用时,#将返回最后一个索引值。如果数组中间的值有nil,则#会认为这些nil就是数组结尾的标志。
如果要处理有中间有nil的数组,可由使用table.maxn,返回一个table的最大正索引

a = {}
a[1000] = 1
print(table.maxn(a)) --> 10000

 

以上是关于第二章 类型与值 Lua程序设计第二版笔记的主要内容,如果未能解决你的问题,请参考以下文章

第一章 开始 Lua程序设计第二版笔记

《代码大全(第二版)》阅读笔记03

《JavaScript高级程序设计 第二版》理解对象

读Java实战(第二版)笔记12_重构测试和调试

求《Lua程序设计(第2版)》中文版 电子书

MongoDB权威指南第二版学习笔记二