1.dofile是lua内置的函数,用于执行代码块。
2.loadfile从一个文件加载lua代码块,但它不会运行代码,只是编译代码,然后将编译的结果作为一个函数返回。
3.loadstriing类似于loadfile,它从一个字符串中读取代码,而非从文件读取。loadstring总是在全局环境中编译它的字符串。
i = 32
local i = 0
f = loadstring("i = i + 1 ; print(i)")
g = function() i = i + 1; print(i) end
f()
g()
4.lua 将所有独立的程序块视为一个匿名函数的函数体,并且该匿名函数还具有可变长实参。
5.lua中,函数定义是一种赋值操作,它们是在运行时才完成的操作。
6.package.loadlib函数聚集了有关动态链接的功能,它有两个字符串参数,用法如下:
local f = package.loadlib(path,functionname)
如果出错则返回nil以及一条错误消息。
7.通常使用require 来加载C程序库,这个函数会搜索指定的库,然后用loadlib来加载库,并返回初始化函数。这个初始化函数将库中提供的函数注册到lua中,就好像一段lua代码定义了其他的函数一样。
8.pcall 函数会以一种“保护模式”来调用它的第一个参数,因此pcall可以捕获函数执行中的任何错误,如果没有发生错误,pcall会返回true以及函数调用的返回值;否则,返回false以及错误消息。
9.可以用error来抛出一个异常或使用pcall来捕获异常。
local status ,err = pcall(function() print("hello "); error({code = 999}) end)
print(err.code)
10.pcall 函数在返回其错误消息时,已经销毁了调用栈的部分内容。如果想得到一个有意义的调用栈,那么就需要在pcall 返回之前获取该信息。xpcall 函数可以达到这一要求。
11.xpcall 函数出来接受一个需要被调用的函数之外,还接受第二个参数——一个错误处理函数。当发生错误时,lua会在调用栈展开之前调用错误处理函数。