一、 数据文件
1、 dofile函数 与loadfile函数
dofile当做lua运行代码的chunk的一种原始的操作。Dofile实际上是一个辅助的函数。真正完成功能的函数loadfile;与dofile不同的是loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码;另外loadfile不会抛出错误信息而是返回错误代码,我们可以这样定义dofile;
function dofile(filename)
local f = assert(loadfile(filename))
return f()
end
2、 loadstring与loadfile
a) loadstring与loadfile相似,只不过它不是从文件里读入chunk,而是从一个串中读入。f = loadstring(“I = i+1”)
b) loadstring函数的功能强大,但使用时需多加小心。确认没有其它简单的解决问题的方法再使用。Loadfile和loadstring都不会抛出错误,如果发生错误他们将返回nil加上错误信息。另外,loadfile和loadstring都不会 有边界效应产生,他们仅仅编译chunk成为自己内部实现的一个匿名函数。通常对他们的误解是他们定义了函数,lua中的函数定义是发生在运行时的赋值而不是发生在编译时
c) loadstring通常用于运行程序外部的代码,比如运行用户自定义的代码。注意:loadstring期望一个chunk,即语句。如果想要加载表达式,需要在表达式前加return,那样将返回表达式的值。Loadstring返回的函数和普通函数一样,可以多次被调用
3、 requie和dofile
a) require会搜索目录加载文件
b) require会判断是否文件已经加载避免重复加载同一文件。由于上述特征,require在Lua中是加载库的更好的函数
c) require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。Require的路径时一个模式列表,每一个模式指明一种由虚文件名转成实文件名的方法。更明确地说,每一个模块指明一种由虚文件名转成实文件名的方法。更明确的说,每一个模块时一个包含可选的问号的文件名。匹配的时候lua会首先将问号用虚文件名替换,然后看是否有这有的文件存在。如果不存在就继续用同样的方法用第二个模式匹配
二、 串行化
a) 保存字符串
i. string.format
ii. 写入文件时
iii. 另外一种安全的方法来括住任意字符串的方法
b) 保存无环的tabel
c) 保存有环的tabel