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