Lua:アクセスモジュール、作成モジュール、サブモジュールとパッケージ

2067 ワード

一、ロードモジュール
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))