LUAピック(コンパイル-デバッグ-実行)

3841 ワード

(dofile - loadfile)
dofileはLUAソースコードからchunkを読み込んでバイトコードにコンパイルして実行し、loadfileはバイトコードを実行します.
function  dofile (filename) 
  local  f = assert(loadfile(filename)) 
  return f() 
end

 
(loadstring)
loadstringはloadfileと似ていますが、ファイルからchunkを読み込むのではなく、1つの列から読み込むだけです.
local s = "print('LUA')"
assert(loadstring(s))()

 
(require)
Luaは、実行ライブラリをロードするための高度なrequire関数を提供します.大雑把に言えばrequireとdofileは同じ機能を完成したが、2つの違いがある:1.requireはディレクトリロードファイルを検索します.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"  then
    print(debug.traceback())
    error("string expected", 2)
  end

end

foo(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 expectedstack 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