今天学习第8章:编译、运行、调试

8. Compilation, Execution, and Errors
1)Lua把每个chrunk都作为一个匿名函数来处理,如:
     f = loadstring("a = 1")  
     相当于:
     f = loadstring("function() a = 1 end")   

2)require函数:
     作用:加载运行库,会搜索目录加载文件,并避免重复加载。
3)c Packages:
     Lua用loadlib()来达到动态链接库的作用,提供了跨平台的一致性调用方式:
     local path = "/usr/local/lua/lib/libluasocket.so"
     -- or path = "C:\\windows\\luasocket.dll"
     local f = assert(loadlib(path, "luaopen_socket" ))
     f() -- actually open the library 

4)错误:
     在非预期的情况出现时会抛出错误,可用assert()来获取错误内容。

5)异常处理:
     (1)将可能引起异常的内容封装在一个函数中
     (2)用pcall调用函数
     如:
     function divide(x,y) return x/y end
     if pcall(divide(2,0)) then ... else... end

     或者:
     err = pcall(divide(2,0)) print(err)

     另外,可以用xpcall和debug库中的debug和debug.traceback来查询错误时的栈调用情况。