一、加载模块
1.1 加载模块
#!/usr/bin/env lua
--complex = require "package.complex"
complex = require "complex"
print (complex.add(3,4))
二、创建模块
2.1 创建一个table,并将需要导出的函数放入其中,最后返回这个table
#!/usr/bin/env lua
local complex = {}
function complex.add(x, y)
return x + y
end
return complex
2.2 使用一个固定的局部名称(例如M)来定义和调用模块内的函数,然后将这个局部名称赋值给模块的最终名称
#!/usr/bin/env lua
local M = {}
complex = M
function M.add(x, y)
return x + y
end
return M
2.3 完全避免写模块名,因为require会将模块名作为参数传递给模块
#!/usr/bin/env lua
local complex = ...
local M = {}
_G[complex] = M
function M.add(x, y)
return x + y
end
return M
2.4 如果一个模块没有返回值的话,require就会返回package.loaded[modname]的当前值
#!/usr/bin/env lua
local complex = ...
local M = {}
_G[complex] = M
package.loaded[complex] = M
function M.add(x, y)
return x + y
end
2.5 使用环境变量,访问前一个环境中的环境变量
3种方法可以访问前一个环境中的环境变量
1. 继承
2. 声明一个局部变量,用以保存对旧环境的访问
3. 强需要用到的函数或模块声明为局部变量
#!/usr/bin/env lua
local complex = ...
local M = {}
_G[complex] = M
package.loaded[complex] = M
--setmetatable(M, {__index = _G})
--local _G = _G
local print = print
setfenv(1, M)
function add(x, y)
--print "aa"
--_G.print "aa"
print "aa"
return x + y
end
2.6 使用module()创建模块
module()取代了前面的设置代码
local complex = ...
local M = {}
_G[complex] = M
package.loaded[complex] = M
--setmetatable(M, {__index = _G})
setfenv(1, M)
#!/usr/bin/env lua
module(...)
--module(..., package.seeall) --等价于setmetatable(M, {--index = _G})
function add(x, y)
--print "aa"
return x + y
end
三、子模块和包
3.1 访问子模块
#!/usr/bin/env lua
complex = require "package.complex"
print (complex.add(3,4))