这里主要介绍使用require将自己写的lua模块加入到环境中。
我使用的是luastudio来编写的脚本,当然其他的编辑器都可以的。lua提供了require函数来加载运行库。它和dofile完成了相同的功能,但是有如下的不同:
1.require会搜索目录来加载文件
2.require不会重复的加载同一个模块
require的路径是一个模式列表,使用提供给require的虚文件名去替换模式里的问号,看这样的文件是否存在;不存在就换第二个模式尝试匹配…。所以为了让require能找到我们自己写的lua 模块我们需要把该模块的路径加入到LUA_PATH中(luastudio 是package.path)。例如我想将指定目录下的所有lua文件都能被require搜索到,我会如下这样做:
package.path = package.path .. ";H:\\luaWorkspace\\tst01\\?lua"
lua里有一个table保持所有加载过文件的列表。在luastudio这儿是package.loaded。所以可以查看loaded表里是否有所要加载的文件名来判断是否加载成功了我们想要加载的文件。
下面就用一个实例来说明如果将自己写的模块加入环境中
--Comp.lua
--require加载文件时会将文件名传给所加载的文件,
local moduleName = ...
local M = {}
_G[ moduleName ] = M
package.loaded[ moduleName ] = M
function M.new( r, i )
return { r=r, i=i }
end
M.i = M.new( 0 , 1 )
function M.add( c1, c2 )
return M.new( c1.r + c2.r, c1.i + c2.i )
end
function M.sub( c1, c2 )
return M.new( c1.r - c2.r, c1.i - c2.i )
end
--test.lua
local ProjectPath = ";H:\\luaWorkspace\\tst01\\?.lua"
package.path = package.path .. ProjectPath
require "Comp"
local c1 = Comp.new( 1, 2 )
local c2 = Comp.new( 3, 4 )
local c3 = Comp.add( c1, c2 )
print( c3.r .. " , " .. c3.i )