include(require)


-- 同一ディレクトリの lib.lua をロードする。 require "lib" add(1, 2);
呼ばれる側
function add( a, b ) return a + b; end
module (name [, ・・・]) モジュールをつくる。 作成されるのはテーブルであり、 package.loaded[ test ] というテーブルとして作成される。 または global テーブルに追加される。 またこのテーブルをカレントの関数の環境にする。 パッケージ名は _NAME 属性に設定される。
test._NAME
名前は Python のモジュールと同じくネストすることもできる。
module( a.b.c )
require (modname) 指定したモジュールをロードする。 package.loaded テーブルをまずはロードすみか検索する。 そうならば package.loaded[modname] を返す。 ローダが見つかれば、 C ローダのモジュールの検索先は package.loaders 配列を変更することで制御できる。 package.path を検索する。 C ローダが見つかると, modname を使ってコールをしてそれをpackage.loaded[modname] にセットする。 つまりロード先を C で実装できる。


Moduleの定義


SYNTAX module( "name", package.seeall ) require( "name", package.seeall ) DESC file を module として扱うように宣言.
-- module 名がそのまま NameSpace || tbl ? になる. require( "test" ); test.sum( 100, 16 );
モジュールの定義は 定義する側のファイルの頭でモジュール名を引数に module 関数を実行します。 以後、module 関数の引数で指定した名前の テーブルに環境が変更される   その副作用として グローバル環境で定義されている関数の呼び出し (組み込み関数の math.random() 等も含む) もできなくなってしまいます。 そのため、module 関数の引数の 2 番目に package.seeall を指定することで この対処が可能になっている -- ファイル mod_test.lua module("mod_test",package.seeall) value=2 function box_muller() local alpha=math.random() -- package.seeall のおかげで使える local beta =math.random() return math.sqrt(-2*math.log(alpha))*math .sin(2*math.pi*beta) end