LUA 拾遗(编译-调试-运行)
(dofile - loadfile)
dofile從LUA源碼讀入chunk編譯為字節碼并執行,loadfile則是執行字節碼。
function dofile (filename) local f = assert(loadfile(filename)) return f() end?
(loadstring)
loadstring與loadfile 相似,只不過它不是從文件里讀入chunk ,而是從一個串中讀入。
local s = "print('LUA')" assert(loadstring(s))()?
(require)
Lua 提供高級的 require 函數來加載運行庫。粗略的說require 和dofile 完成同樣的功
能但有兩點不同:
1. require 會搜索目錄加載文件
2. require 會判斷是否文件已經加載避免重復加載同一文件。由于上述特征,require
在Lua 中是加載庫的更好的函數。
?
?
(C ?Packages)
local path = "/usr/local/lua/lib/libluasocket.so" local f = loadlib(path, "luaopen_socket")lua程序中使用loadlib導入動態庫,出現錯誤
??attempt to call global 'loadlib' (a nil value)
修正方法:
luaconf.h文件中,
將
#undef LUA_COMPAT_LOADLIB
改成
#define LUA_COMPAT_LOADLIB
重新編譯一個luac可執行文件。OK!!!
?
(異常和錯誤處理以及traceback)
如果在Lua 中需要處理錯誤,需要使用pcall 函數封裝你的代碼。
local status, err = pcall(function () error({code=121}) end ) print(err.code) --> 121 function foo (str)if type(str) ~= "string" thenprint(debug.traceback())error("string expected", 2)endendfoo(LUA)>lua -e "io.stdout:setvbuf 'no'" "test.lua"
stack traceback:
test.lua:3: in function 'foo'
test.lua:9: in main chunk
[C]: ?
lua: test.lua:9: string expected
stack traceback:
[C]: in function 'error'
test.lua:4: in function 'foo'
test.lua:9: in main chunk
[C]: ?
>Exit code: 1
?
轉載于:https://www.cnblogs.com/mark-huang/archive/2013/05/03/3058539.html
總結
以上是生活随笔為你收集整理的LUA 拾遗(编译-调试-运行)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP json_encode 只支持
- 下一篇: STL源码剖析 读书笔记一 2013-5