Lua程序设计(4)
Lua的输入输出、补充知识
输入输出
单就Lua语言而言,只提供了ISO C语言标准支持的功能,即基本的文件操作等。
简单I/O模型
简单模型虚拟了一个当前输入流和一个当前输出流。函数io.input
和函数io.output
可以用于改变当前的输入输出流,调用io.input
会以只读模式打开指定文件,并将文件设置为当前输入流。之后所有的输入都将来自该文件,除非再次调用io.input
。
io.write
函数io.write
可以读取任意数量的字符串并将其写入当前输入流。由于调用函数时可以使用多个参数,因此应尽量避免使用连接操作符以节省资源。
作为原则,应该只在”用后即弃”的代码中使用函数print,当需要完全控制输出时,应该使用函数io.write。
io.read
参数 | 操作 |
---|---|
“a” | 读取整个文件 |
“l” | 读取下一行(丢弃换行符) |
“L” | 读取下一行(保留换行符) |
“n” | 读取一个数值 |
Num | 以字符串读取num个字符 |
调用io.read("a")
可从当前位置开始读取当前输入文件的全部内容,如果当前处于文件末尾或者文件为空,那么该函数返回一个空字符串。
完整I/O模型
可以使用函数io.open
来打开一个文件,这个函数有两个参数,一个参数是待打开文件的文件名,另一个参数是一个模式字符串,包括表示只读的r,表示只写的w,表示追加的a,以及一个可选的表示打开二进制文件的b。
补充知识
局部变量和代码块
Lua中的变量在默认情况下是全局变量,所有的局部变量在使用前必须声明。
- 局部变量可以避免由于不必要的命名而造成全局变量的混乱。
- 局部变量还能避免同一程序中不同代码部分的命名冲突
- 访问局部变量比访问全局变量更快
- 局部变量会随着其作用域的结束而消失,使得垃圾收集器能够将其释放
控制结构
if then else
elseif
while
repeat-until:类似于do-while
数值型for:
1
2
3for var = exp1,exp2,exp3 do
something
endvar值从exp1变化到exp2之前的每次循环会执行something,并在每次循环结束后将步长exp3增加到var上,如果exp3不存在则默认为1,不想设置循环上限,可以使用math.huge。
泛型for:
泛型for遍历迭代函数返回的所有值,例如
pairs
、ipairs
、io.lines
等。break、return、goto:标签形如
::name::