Lua 编程中的只读表
在使用表时,只要我们知道键,我们就可以轻松访问和修改表中的值。但在某些情况下,我们希望我们的表为只读格式,以便无法修改表中的值。
这种特殊方法有很多好处,因为我们可以利用这种只读表来存储我们不希望任何人改变的信息,例如存储员工的数据。
为了使任何表成为只读表,我们使用该setmetatable()函数以及__index和__newindex元方法。
让我们首先编写一个将表作为参数的函数,然后将该表转换为只读表。
示例
考虑如下所示的功能-
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
现在让我们使用上面的函数,我们将一个表传递给上面的函数,然后尝试修改表中存在的值。
days = readOnly{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} print(days[2])--> Monday days[2] = "Noday"输出结果
stdin:1: attempt to update a read-only table