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"  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 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 拾遗(编译-调试-运行))