lua 元表,监控变量赋值及访问,并自动保存

g_local_data = {}

local local_data_real = {}

local mt = {
     __index = function (t, k)
--         print("access to element " .. tostring(k))
         return local_data_real[k]
     end,

     __newindex = function (t, k, v)
  --       print("update of element " .. tostring(k))
         local_data_real[k] = v
         saveLocalData()
     end
 }

setmetatable(g_local_data, mt)

cjson = require("cjson")

local filename = UserData.account .. ".data"

filename = string.gsub(filename , ":" , "_")
filename = CCFileUtils:sharedFileUtils():getWritablePath() .. filename

function saveLocalData()
    local fout = io.open(filename , "w")
    if not fout then
        print("write flie err!")
        return
    end

    local data = cjson.encode(local_data_real)

    fout:write(data)

    fout:close()
end

function readLocalData()
    local fin = io.open(filename , "r")
    if not fin then
        return
    end

    local data = fin:read("*a")
    local_data_real = cjson.decode(data)

    fin:close()
end

--读入数据
readLocalData()

  

时间: 2024-10-27 06:05:11

lua 元表,监控变量赋值及访问,并自动保存的相关文章

lua元表(metatable)和元方法(metamethod)

元表概念: 引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等.但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作. 访问机制:一般的元方法都只针对Lua的核心,也就是一个虚拟机.它会检测一个操作中的值是否有元表,这些元表是否定义了关于次操作的元方法.例如两个table相加,先检查两者之一是否有元表,之后检查是否有一个叫“__add”的字段,若找到,则调用对应的值.“__add”等即时字段,其对应的值(往往是一个函数或是table

[转]LUA元表

lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmetatable(t)) --显示过元表 此时是nil --可以用setmetatable来设置或修改任何table的元表 t1 = {} setmetatable(t,t1) assert(getmetatable(t) == t1) 任何t

【JavaScript基础】在写冒泡排序时遇到的JavaScript基础问题:JavaScript的数据类型和变量赋值时的原理

写冒泡排序时,遇到一个问题: function bubbleSort(arr){ var temp = 0; console.log("传入的数组:"); console.log(arr); for(var i = 0;i<arr.length;i++){ //循环arr.length-1次 console.log("外层第"+i+"次循环===============start"); for(var j = 0;j<arr.leng

一个lua文件如何调用另一个lua文件的变量?

进来在学习春哥的OpenResty,个人对lua也不怎么熟练,难免会碰到很多奇奇怪怪的问题,这里就稍微记录下碰到的一些小问题,以供他人参考. 上网搜相关资料,大多数资料都只是说调用lua的require或者dofile,并且详细说命它们的区别,不是说没用,只是没有回答我的问题--如何在OpenResty服务器上,实现lua文件之间的变量互用? 首先,得要指定require的路径,需要在http段里面配置变量"lua_package_path /topath/?.lua;;",注意这里的

js变量作用域及访问权限的探讨(2)

每一种语言都有变量的概念,变量是用来存储信息的一个元素.比如下面这个函数: 复制代码 代码如下: function Student(name,age,from)  {   this.name = name;    this.age = age;   this.from = from;    this.ToString = function()   {    return "my information is name: "+this.name+",age : "+t

Hibernate通过什么方法可以把私有成员变量赋值成数据库查询到的值然后返回POJO对象呢?

public void setAccessible(boolean flag) throws SecurityException将此对象的 accessible 标志设置为指示的布尔值.值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查.值为 false 则指示反射的对象应该实施 Java 语言访问检查.参考博文:http://www.cnblogs.com/sunxucool/p/3552985.html Hibernate通过什么方法可以把私有成员变量赋值成数据库查询到

sqlserver变量赋值介绍说明

变量对于一种语言是必不可少的一部分,当然,对于T-SQL来讲也是一样.在简单查询中,往往很少用到变量, 但无论对于复杂的查询或存储过程中,变量都是必不可少的一部分.在SQLServer中,变量分全局变量和局部变量两种: 一.全局变量: 全局变量是由系统定义的,在整个SQL Server实例内都能访问到的变量.全局变量以两个@@符号作为开头,用户只能访问,不能赋值. Sql Server一共提供了30多个全局变量 常用:@@IDENTITY  : 返回最后插入行的标识列的列值.@@ERROR  :

Python 变量类型及变量赋值

在 Python 中,变量不一定占用内存变量.变量就像是对某一处内存的引用,可以通过变量访问到其所指向的内存中的值,并且可以让变量指向其他的内存.在 Python 中,变量不需要声明,但是使用变量之前,一定要先对变量进行赋值.当创建了一个新对象时,Python 会向操作系统请求内存,Python 本身实现了内存分配系统.变量类型指的是变量所指向的内存中 对象 的类型.Python 中变量赋值使用 = 等号,等号左面为创建的变量,等号右面为需要的值. # #创建一个变量名为 a 的变量 # a =

十三、Shell篇——变量赋值、引用、作用范围

变量的定义 变量名的命名规则 - 字母.数字.下划线 - 不以数字开头 变量的赋值 为变量赋值的过程,称为变量替换 变量名=变量值 - a=123 使用let为变量赋值 - let a=10+20 将命令赋值给变量 - l=ls 将命令结果赋值给变量,使用$ () 或者" 变量值有空格等特殊字符可以包含在""或"中 (1)将命令结果赋值给变量,使用$ () 或者" [email protected] ~ % cmd1=`ls test/` [email p