この初版は Lua 5.0 向けに執筆されました。後続バージョンでも概ね関連性はありますが、いくつかの相違があります。
第 4 版は Lua 5.3 をターゲットにしていて、Amazon や他の書店で購入できます。
書籍を購入することで、Lua プロジェクトを支援することもできます。


13.4.5 – 読み取り専用テーブル

プロキシの概念を、読み取り専用テーブルの実装に適用するのは簡単です。必要なことは、テーブルの更新の試みが追跡されたら、常にエラーを発生させることです。__index メタメソッドでは、クエリを追跡する必要がないため、関数ではなくテーブル (元のテーブル自体) を使うことができます。すべてのクエリを元のテーブルにリダイレクトする方が簡単で、効率もずっと高くなります。ただし、この使い方は、__index が元のテーブルを指す新しいメタテーブルを各読み取り専用プロキシに要求します。

    function readOnly (t)
      local proxy = {}
      local mt = {       -- create metatable
        __index = t,
        __newindex = function (t,k,v)
          error("attempt to update a read-only table", 2)
        end
      }
      setmetatable(proxy, mt)
      return proxy
    end
(error への第 2 引数、2 は、更新が試行された場所にエラーメッセージを送信することを忘れないでください。) 使用例として、曜日の読み取り専用テーブルを作成できます。
    days = readOnly{"Sunday", "Monday", "Tuesday", "Wednesday",
             "Thursday", "Friday", "Saturday"}
    
    print(days[1])     --> Sunday
    days[2] = "Noday"
    stdin:1: attempt to update a read-only table