第一版是針對 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但有一些差異。
第四版針對 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,會將錯誤訊息導向嘗試更新的地方。)作為使用範例,我們可以為星期建立唯讀表格
    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