Lua的loadfile、dofile、loadstring、require
loadfile( file ) -- 加载
dofile( file ) -- 编译并执行
require( file ) -- 像dofile一样载入文件为一个Chunk并执行。不过不会重复加载相同的文件。
require() 传入的参数,是一个完整的文件名
加入目录的文件需要插入路径。
不过可以通过把路径添加到package.path,这样就不需要在require的时候加入文件的路径
如:
package.path=package.path .. ";C:\?.lua"
require( "main" )
loadstring
作用就是加载和运行一个字符串
一般用法
assert( loadstring( str ) )()
如:
i = 1
local f = loadstring( "i = i + 1" )
print( i )
f()
print( i )
loadstring返回一个function,调用后即执行字符串。
代码示例
a = {}
function a:init( prop )
print( "a:init" )
end
local f = loadstring( "function a:init() print( 'do you feel me?' ) end" )
a:init()
f()
a:init()
注意:loadstring只针对全局变量有效。
local a = {}
function a:init( prop )
print( "a:init" )
end
local f = loadstring( "function a:init() print( 'do you feel me?' ) end" )
a:init()
f()
a:init()
>lua -e "io.stdout:setvbuf 'no'" "loadstring.lua"
a:init
lua: [string "function a:init() print( 'do you feel me?' ..."]:1: attempt to index global 'a' (a nil value)
stack traceback:
[string "function a:init() print( 'do you feel me?' ..."]:1: in function 'f'
loadstring.lua:8: in main chunk
[C]: ?
>Exit code: 1