この初版は Lua 5.0 用に書かれました。後のバージョンでも大部分は関連がありますが、いくつかの差異があります。
第 4 版は Lua 5.3 を対象としており、Amazon および他の書店で購入できます。
本を購入することで、Lua プロジェクトの支援にもなります。


15.3 – パッケージとファイル

通常、パッケージを作成すると、そのコードをすべて 1 つのファイルに入れます。次に、パッケージを開いたりインポートしたりするには (つまり、利用できるようにするには) そのファイルを実行します。たとえば、complex.lua ファイルに複合パッケージの定義がある場合、require "complex" コマンドでパッケージが開きます。require は同じパッケージを複数回ロードしないことに注意してください。

ファイル名とパッケージ名との関係は、繰り返し発生する問題です。もちろん、それらに関連付けるのは良い考えです。require はパッケージではなくファイルを使用するためです。1 つの解決策は、パッケージにちなんでファイルを名付け、既知の拡張子を付けることです。Lua は拡張子を修正しません。それを行うのはパス次第です。たとえば、パスに "/usr/local/lualibs/?.lua" などのコンポーネントが含まれている場合、パッケージ complexcomplex.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 にロードします。