この第一版は Lua 5.0 向けに書かれました。後続バージョンでも依然として関連性はありますが、いくつか相違があります。
第四版は Lua 5.3 を対象としており、Amazon およびその他の書店で入手できます。
この書籍を購入することで、Lua プロジェクトの支援にも役立ちます。


5.3 – 名前付き引数

Lua のパラメータ渡しメカニズムは位置的です。関数を呼び出すとき、引数は位置によってパラメータと一致します。最初の引数は最初の引数に値を渡し、以降も同様です。ただし、時には引数を名前によって指定する方が便利な場合があります。この点を説明するために、ファイルを名前変更する renameos ライブラリから)関数を考えましょう。自分が新しい名前なのか古い名前なのかを忘れてしまうことがよくあるため、2 つの引数が名前によって取得されるようにこの関数を再定義したいと思うかもしれません。

    -- invalid code
    rename(old="temp.lua", new="temp1.lua")
Lua はその構文を直接サポートしていませんが、小さな構文変更を行うことで最終的な効果を得ることができます。ここで考え方は、すべての引数をテーブルにまとめ、そのテーブルを関数への唯一の引数として使用することです。Lua が関数呼び出しに提供する特別な構文、引数としてテーブルコンストラクタが 1 つのみ指定されることで、トリックを支援します。
    rename{old="temp.lua", new="temp1.lua"}
したがって、rename をパラメータを 1 つのみ指定して定義し、このパラメータから実際の引数を取得します。
    function rename (arg)
      return os.rename(arg.old, arg.new)
    end

このスタイルのパラメータ渡しは、関数が多数のパラメータを持ち、そのうちのほとんどがオプションの場合に特に役立ちます。たとえば、GUI ライブラリで新しいウィンドウを作成する関数は、数十個の引数を持つ可能性があり、そのほとんどはオプションであり、名前によって指定することをお勧めします。

    w = Window{ x=0, y=0, width=300, height=200,
                title = "Lua", background="blue",
                border = true
              }
これにより、Window 関数は必須引数の確認、既定値の追加などを自由に実施できます。新しいウィンドウを実際に作成する基本的な _Window 関数(すべての引数が必要)があるとすると、Window を次のように定義できます。
    function Window (options)
      -- check mandatory options
      if type(options.title) ~= "string" then
        error("no title")
      elseif type(options.width) ~= "number" then
        error("no width")
      elseif type(options.height) ~= "number" then
        error("no height")
      end
    
      -- everything else is optional
      _Window(options.title,
              options.x or 0,    -- default value
              options.y or 0,    -- default value
              options.width, options.height,
              options.background or "white",   -- default
              options.border      -- default is false (nil)
             )
    end