lua local 变量和表

local是我们在lua编程里面经常写的,经常写的方式为local foo = foo。lua对local的处理有加速访问的效果,并且将变量定义为局部变量也是一种好的编程习惯。

lua对变量和表的local化处理的方式是不同的

======example======

foo = {}

foo.a =1

do

local foo = foo

foo.a =2

print(foo, _G["foo"])

print(foo.a)

print(_G["foo"].a)

end

print(_G["foo"].a)

print("----next case----")

var = 1

do

local var = var

var = 2

print(var)

print(_G["var"])

end

print(_G["var"])

执行结果:

table: 0x7febca407920 table: 0x7febca407920

2

2

2

----next case----

2

1

1

=============

通过代码结果可以看到,local表=全局表,是同一个表,这主要是由于lua的表机制是匿名的,相当于函数的指针,local foo = foo,即使本地foo没有在全局_G注册,还是引用的是同一个表。当没有变量指向表的时候,垃圾回收器会销毁这个匿名表。

而local变量则是创建一个新的变量,遵守子作用域覆盖父作用域的规则。

特别是对于require "modname"中的模块,在编写的时候,不能直接使用全局变量,因为是同一个变会保存其变量状态影响其他使用。最好的处理方式就是尽可能的依据入参,函数内部定义local 变量等来编写代码。

时间: 2024-12-29 15:15:17

lua local 变量和表的相关文章

lua的变量查找及全局变量

一.从hello world说起 当执行print("Hello World!")时,明显这是需要有执行一个特定的向标准输出打印字符串的功能,所以这里首先涉及到的是一个函数查找的问题,也就是如何把字符串和对应的功能联系起来.在最为常见的C语言中,这个查找是由链接器完成的:它从所有的obj文件中查找这个函数的定义,然后把这个地方转换成对应位置的CPU call指令.对应地,对于lua,同样需要有方法将这个字符串和真正的函数调用联系起来.那么最后的问题就是:当lua遇到一个变量时,它会如何

Lua中的weak表——weak table

弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak references,元素为弱引用的表就叫弱表.有弱引用那么也就有强引用,有引用那么也就有非引用.我们先要厘这些基本概念:变量.值.类型.对象. (1)变量与值:Lua是一个dynamically typed language,也就是说在Lua中,变量没有类型,它可以是任何东西,而值有类型,所以Lua中没

cmake 常用变量和常用环境变量查表手册

cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量.显式定义的例子我们前面也提到了,使用 SET 指令,就可以

MYSQL存储过程中 使用变量 做表名--转

原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持直接使用变量做表名,GOOGLE了下,采用以下方法: DECLARE dbName VARCHAR(30); SET dbName = 'aaa'; SET @STMT :=CONCAT("CREATE TABLE ",dbName," SELECT id from gamedb

常见Windows系统变量对应表

常见Windows系统变量对应表 ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者http://blog.51cto.com/lander 2018/11/08 8:00 问题描述 日常 Windows 运维管理中经常要写一些脚本,需要知道一些对常见的系统变量比较了解. 常见系统变量对应表 %WINDIR% = 系统目录 C:\WINDOWS %SYSTEMROOT% = 系统目录 C:\WINDOWS} %SYSTEMDRIVE% = 系统根

Lua中的weak表——weak table(转)

弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak references,元素为弱引用的表就叫弱表.有弱引用那么也就有强引用,有引用那么也就有非引用.我们先要厘这些基本概念:变量.值.类型.对象. (1)变量与值:Lua是一个dynamically typed language,也就是说在Lua中,变量没有类型,它可以是任何东西,而值有类型,所以Lua中没

lua环境变量

function foo() print(g or "'g' is not defined!") end foo() env = { g = 100, print = print } setfenv(foo, env)  --设置foo的环境为表env foo() print(g or "'g' is not defined!") 输出结果: 'g' is not defined! 100 'g' is not defined! 函数环境 函数环境就是一个函数在运行

lua 数据以table表的形式存储

出处:http://blog.sina.com.cn/s/blog_991afe570101rkfh.html 感谢,原文作者的无私奉献! 实现思路: table表 ------> 转为字符串(这里利用json库)------->存储--------->读取 达成目的: 解决字符串拼接问题 用最简单办法将table表存入文件,方便游戏存档.游戏关卡等等 第一步:将table表转为json格式的字符串 导入头文件 --2.2.5的quick版本已经在框架载入时完成了json模块的初始化,所

JavaScript 笔记(2) -- 类型转换 &amp; 正则表达 &amp; 变量提升 &amp; 表单验证

目录:  typeof, null, undefined, valueOf() 类型转换 正则表达式 错误: try, catch, throw 调试工具 变量提升 strict 严格模式 使用误区 表单 & 表单验证 JavaScript void typeof, null, undefined, valueOf() typeof:用于检测变量的数据类型,eg: typeof "John"; // 返回 string 在 JavaScript 中有 5 种不同的数据类型:st