加载、运行 - abbshr/Lua-newbie GitHub Wiki
虽然Lua 是解释型语言,但是 Lua 会首先把代码预编译成中间码然后再执行
模块加载
loadfile()
函数可以加载文件作为chunk但不执行,loadfile会返回一个chunk函数,当调用这个函数时才执行chunk里的代码
loadstring()
是从一个字符串中读入chunk,也是返回chunk函数不执行。之后的操作类似JS中的eval(),会在全局环境编译。ex:
function foo( ... )
loadstring("local x = 1")()
print(x)
end
foo() --打印nil
print(x) --打印nil
f = loadstring("function foo() print(123) end")
f()
foo() --123
也就是说loadstring中字符串的执行环境是独立的chunk。因为lua把每一个chunk当作一个匿名函数处理:
loadstring("a = 1")
=>
function () a = 1 end
既然是在函数中,当然也可以返回(return)值。
如果loadstring函数发生错误会返回nil和错误信息
require()
函数会判断文件是否已经加载,避免重复加载。
加载函数库
require使用的路径是模式列表,查找一个文件时将按如下模式进行:
?;?.lua;c:\windows\?.lua;/usr/local/lua/?/?.lua
抛出异常和错误处理
assert()
函数提供了错误处理。ex:
n = assert(io.read(), "invalid!")
error()
可以抛出错误