この初版は Lua 5.0 用に書かれました。後のバージョンでも大部分は関連がありますが、いくつかの差異があります。
第 4 版は Lua 5.3 を対象としており、Amazon および他の書店で購入できます。
本を購入することで、Lua プロジェクトの支援にもなります。
![]() |
Programming inLua | ![]() |
パート II. テーブルとオブジェクト 章 15. パッケージ |
通常、パッケージを作成すると、そのコードをすべて 1 つのファイルに入れます。次に、パッケージを開いたりインポートしたりするには (つまり、利用できるようにするには) そのファイルを実行します。たとえば、complex.lua
ファイルに複合パッケージの定義がある場合、require "complex"
コマンドでパッケージが開きます。require
は同じパッケージを複数回ロードしないことに注意してください。
ファイル名とパッケージ名との関係は、繰り返し発生する問題です。もちろん、それらに関連付けるのは良い考えです。require
はパッケージではなくファイルを使用するためです。1 つの解決策は、パッケージにちなんでファイルを名付け、既知の拡張子を付けることです。Lua は拡張子を修正しません。それを行うのはパス次第です。たとえば、パスに "/usr/local/lualibs/?.lua"
などのコンポーネントが含まれている場合、パッケージ complex
は complex.lua
ファイル内に存在する可能性があります。
その逆を好む人もおり、ファイル名にちなんでパッケージを動的に命名します。つまり、ファイル名を変更すると、パッケージも変更されます。この解決策により、柔軟性が増します。たとえば、同じ名前の 2 つの異なるパッケージを入手した場合、どちらの場合も変更する必要はなく、1 つのファイルの名前を変更するだけです。この命名方式を Lua に実装するには、_REQUIREDNAME
変数を使用します。require
はファイルをロードするときは仮想ファイル名を使用してその変数を定義することに注意してください。そのため、パッケージで次のようなものを記述できます
local P = {} -- package if _REQUIREDNAME == nil then complex = P else _G[_REQUIREDNAME] = P endこのテストにより、
require
なしでパッケージを使用できます。_REQUIREDNAME
が定義されていない場合、パッケージの固定名 (この例では complex
) が使用されます。それ以外の場合は、パッケージは仮想ファイル名を使用して登録されます (それが何であっても)。ユーザーがライブラリを cpx.lua
ファイルに入れ、require"cpx"
を実行すると、パッケージはそれ自体をテーブル cpx
にロードします。別のユーザーがライブラリを cpx_v1.lua
ファイルに移動し、require"cpx_v1"
を実行すると、パッケージはそれ自体をテーブル cpx_v1
にロードします。著作権 © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |