Lua 学习笔记(2) 类型与值、表达式、语句
参考书籍:
《Lua程序设计》
Lua是一种动态类型的语言
8种基本类型:
- nil
- boolean
- number
- string
- userdata
- function
- thread
- table
nil
表示无效值(non-value),可用来删除一个变量
boolean
false
和nil
都为假,其他都为真(包括0
和空字符串)。
number
--下面都是合法数字常量
4
0.4
4.2e-3
0.31e14
3e+23
string
lua的字符串是不可变的值,修改字符串需要重新创建。
--多行字符串:
page = [[
<html>
...
</html>
]]
--[==[
这里的代码被注释了,中间多个等号对称
]==]
table
可以表示:模块(module)、包(package)、对象(object)。
- 输入
io.read
的含义:io模块的read函数。实际lua表示:用read
作为key,索引表io
中。 a.x = 10
等价与a["x"] = 10
--读取文件前10行
for i = 1, 10 do
a[a#+1] = io.read()
--a[i] = io.read()
end
userdate
可以将C语言数据存储到lua变量中,但只能进行赋值和相等性测试。
表达式
a % b == a - floor(a/b) * b
x%1 --取x的小数部分
x - x%1 --取x的整数部分
x = math.pi
print(x - x%0.01) -->3.14,取x精确到小数点后两位
--对于table、userdate和函数,lua作引用比较,即引用同一个对象时,它们才相等。
a = {}; a.x = 1
b = {}; b.x = 1
c = a
a == c -->true
a == b -->false
--给默认值方法
x = x or v --即x为nil时,x = v
语句
local foo = foo
:将全局变量foo初始化局部变量foo。可以加速当前作用域对foo的访问。
迭代器
迭代器:
- 迭代文件每行:io.lines
- 迭代table元素:pairs
- 迭代数组元素:ipairs
- 迭代字符串中单词(string.gmath)
泛型for
保存着三个值(表达式的返回值):
- 迭代器函数
- 恒定状态(invariant state)
- 控制变量(control variable)
- 通常一个基于closure实现的迭代器比使用table的迭代器更高效。