第一版是針對 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也可以協助 支援 Lua 專案。
![]() |
用 Lua 進行程式設計 | ![]() |
第二部。表格和物件 第 13 章。元表格和元方法 |
可以輕鬆調整代理的概念來實作唯讀表格。我們所要做的就是每當追蹤到任何更新表格的嘗試時,就引發錯誤。對於 __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
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |