Lua:访问模块、创建模块、子模块与包

一、加载模块

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))

你可能感兴趣的:(Lua)