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
广告