只读的表

简介: 只读的表

使用代理的概念可以很容易地实现只读的表,需要做的只是跟踪对表的更新操作并抛出异常即可。对于元方法 __index ,由于我们不需要跟踪查询,所以可以直接使用原来的表来代替函数。这样做比把所有的查询重定向到原来的表上更简单也更有效率。不过,这种做法要求为每个只读代理创建一个新的元表,其中 __index 元方法指向原来的表:

function readonly (t)
  local proxy = {}
  local mt = {
    __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[1])        --> Sunday
days[2] = "Monday"    --> stdin:1: attempt to update a read-only table
目录
相关文章
数据库里的表字段含有‘-’的修改
数据库里的表字段含有‘-’的修改
|
6月前
|
SQL 数据处理 定位技术
数据库基础(二):数据库表创建、修改、复制、删除与表数据处理
数据库基础(二):数据库表创建、修改、复制、删除与表数据处理
189 2
|
关系型数据库 MySQL
|
SQL 数据库 数据库管理
数据库|数据库之定义删除修改基本表
数据库|数据库之定义删除修改基本表
127 1
|
关系型数据库 测试技术 数据库
Postgres 如何清空数据库下的所有表记录,但保留表结构?
Postgres 如何清空数据库下的所有表记录,但保留表结构?
524 0
|
数据库
【TP5.1】数据库的字段只可以读不可更新
【TP5.1】数据库的字段只可以读不可更新
81 0
【TP5.1】数据库的字段只可以读不可更新
|
Oracle 关系型数据库 数据库
OGG重新同步表
OGG在线重新同步表的步骤
263 0
|
数据可视化 NoSQL 关系型数据库
如何查看MySQL数据库状态及信息(内存、数据库、编码格式、表、列、索引等)
如何查看MySQL数据库状态及信息(内存、数据库、编码格式、表、列、索引等)
496 0
如何查看MySQL数据库状态及信息(内存、数据库、编码格式、表、列、索引等)
|
存储 SQL 关系型数据库
MySQL使用存储过程为数据库中全部的表增加备用字段
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/84879858 ...
1765 0