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

更新于: 2021 年 7 月 19 日

695 次浏览

开启 职业生涯

完成课程,获得认证证书

开始学习
广告