Luaリファレンス 要注意点 ~モジュール作成~

モジュールの作成

module ("モジュール名", package.seeall)

module 化すると、モジュールファイルの中では、グローバル変数が使えなくなってしまうので、
それを使えるようにするために package.seeall がある。
事実上第2引数には、package.seeall 以外は指定出来ない。

モジュール名.lua というファイルに作るのが良い。

このモジュールには、_M, _NAME, _PACKAGE にそれぞれ、モジュールテーブル、モジュール名、パッケージ名が格納される。

モジュールのロード

require

local m = require "io"
m.write("hello world\n")

for w in pairs(m) do
    print(w)
end

のような形となる。

ジュールがロード済

package.loaded( ) で判定可能。(有効な値[通常テーブルのアドレス])が入っている。
たとえば、

package.loaded["io"]

パスの検索(Luaライブラリ)

たとえば、

require "sql"

と書いた場合、

  • sql
  • sql.lua
  • c:\windows\sql
  • /usr/local/lua/sql/sql.lua

の順番で検索する。

パスの検索(Cライブラリ)

たとえば、

require "sql"

と書いた場合、

  • .\?.dll
  • C:\Program Files\Lua501\dll\?.dll

の順番で検索する。

パスと環境変数

環境変数LUA_PATH

Luaモジュール用のパスは環境変数 LUA_PATH で設定が可能。
その際には、LUAのデフォルトのパスは「;;」で付け加えることが可能

環境変数LUA_CPATH

Cモジュール用のパスは環境変数 LUA_CPATH で設定が可能。
その際には、LUAのC系検索デフォルトのパスは「;;」で付け加えることが可能。

モジュール名とハイフン

モジュールの名前にハイフンが入っていると、そこまでは取り除かれる
対象がC系APIをロードするためのものであれば、特殊な現象が起きる。

require "v1-mod"   ---> luaopen_mod
require "a-b"        ---> luaopen_b

サブモジュール

require "mod.sub"

luaでは、modディレクトリのsub.lua ファイル
C系ライブラリの場合は、というファイルのluaopen_mod_subに紐付けされる。
''メインのモジュールをロードしたからといって、
そのディレクトリ下にあるサブモジュールが勝手にロードされるといったことはない。''
ちゃんと自分で全部呼び出すこと。


トップ   差分 履歴 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-29 (金) 00:00:00