大家好,欢迎来到IT知识分享网。
文章目录
零、相关文章
一、前言
哈喽大家好,我是 FEZ98 ,今天继续系统学习Lua。这个系列是我系统学习Lua语言的学习笔记,我会把遇到的一些比较值得记录与关注的知识写在里面,供自己以后进行回顾。
二、Lua 文件 I/O
Lua I/O 库用于读取和处理文件,其分为简单模式和完全模式。
简单模式: 拥有一个当前输入文件和当前输出文件,并且提供针对这些文件的相关操作。
完全模式:使用外部的文件句柄来实现。以一种面对对象的形式,将所有文件操作定义为文件句柄的方法。
简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。
打开文件操作语句如下:
file = io.open (filename [, mode])
(2.1)简单模式
(2.2)完全模式
如果需要在同一时间处理多个文件,需要使用 file:function_name 来代替 io.function_name 方法。
其中 io:read() 的参数如下:
- “n”: 读取一个数字,根据 Lua 的转换文法,可能返回浮点数或整数。 (数字可以有前置或后置的空格,以及符号。) 只要能构成合法的数字,这个格式总是去读尽量长的串; 如果读出来的前缀无法构成合法的数字 (比如空串,“0x” 或 “3.4e-”), 就中止函数运行,返回 nil。
- “i”: 读取一个整数,返回整数值。
- “a”: 从当前位置开始读取整个文件。 如果已在文件末尾,返回空串。
- “l”: 读取一行并忽略行结束标记。 当在文件末尾时,返回 nil 这是默认格式。
- “L”: 读取一行并保留行结束标记(如果有的话), 当在文件末尾时,返回 nil。
number: 读取一个不超过这个数量字节数的字符串。 当在文件末尾时,返回 nil。 如果 number 为零, 它什么也不读,返回一个空串。 当在文件末尾时,返回 nil。格式 "l" 和 "L" 只能用于文本文件。
完全模式的其他方法如下:
file:seek(optional whence, optional offset): 设置及获取基于文件开头处计算出的位置。 设置的位置由 offset 和 whence 字符串 whence 指定的基点决定。基点可以是:
“set”: 从文件头开始
“cur”: 从当前位置开始[默认]
“end”: 从文件尾开始
当 seek 成功时,返回最终从文件开头计算起的文件的位置。 当 seek 失败时,返回 nil 加上一个错误描述字符串。
whence 的默认值是 “cur”, offset 默认为 0 。 因此,调用 file:seek() 可以返回文件当前位置,并不改变它; 调用 file:seek(“set”) 将位置设为文件开头(并返回 0); 调用 file:seek(“end”) 将位置设到文件末尾,并返回文件大小。file:flush (): 将写入的数据保存到 file 中。io.lines(optional file name): 打开指定的文件 filename 为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回 nil,并自动关闭文件。
若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件。如:for line in io.lines("IO_Test.lua") do print(line) end
三、Lua 错误处理
Lua 中的错误分为:语法错误和运行错误。
(3.1)语法错误
(3.2)运行错误
(3.3)错误处理
Lua 中可以使用 assert 和 error 来处理错误。
(3.3.1)assert
assert 首先检查第一个参数,若没问题,assert不做任何事情;否则,assert以第二个参数作为错误信息抛出。
(3.3.2)error
error 语法格式如下:
error(message [, level])
Level参数指示获得错误的位置:
- Level=1[默认]:为调用error位置(文件+行号)
- Level=2:指出哪个调用error的函数的函数
- Level=0:不添加错误位置信息
(3.3.3)pcall
if pcall(function_name, ….) then -- 没有错误 else -- 一些错误 end
(3.3.4)xpcall
debug库提供了两个通用的错误处理函数:
- debug.debug:提供一个Lua提示符,让用户来检查错误的原因
- debug.traceback:根据调用桟来构建一个扩展的错误消息
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118430.html




