此第一版专为 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。保留所有权利。 |