Lua中的弱引用介绍_Lua

一个table的弱引用类型是通过其元素表中的__mode字段来决定的,这个字段的值应为一个字符串,如果这个字符串中包含字母'k'/'v'那么这个table 的value是弱引用,代码如下:

复制代码 代码如下:

key = {} 
a[key] = 1 
key = {} 
a[key] = 2 
collectgarbage() --强制进行一次垃圾收集 
for k, v in pairs(a) do 
    print(v) 
end 

结果:2

第二句复制key = {} 会覆盖第一个key.当收集器运行时,由于没有其他地方在引用第一个key,因此第一个key就被回收了,并且table中的相应条目也被删除了,至于第二个key,变量key仍引用它,因此它没有被回收了

注意,lua只会回收弱引用table中的对象,而像数字和bool这样的值,是不可以回收的。

时间: 2024-10-03 13:19:33

Lua中的弱引用介绍_Lua的相关文章

Lua中执行系统命令方法介绍_Lua

Lua中,os.execute可以执行dos命令,但是返回的是系统状态码,默认输出. io.popen()也可以执行dos命令,但是返回一个文件.eg: 复制代码 代码如下: local t = io.popen('svn help') local a = t:read("*all") --a返回一个字符串,内容是svn help的内容 如果想执行某命令或程序可选os.execute(),如果还想捕捉该执行结果可用io.popen() eg:复制文件 复制代码 代码如下: os.exe

Lua中table库函数方法介绍_Lua

一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认

Lua中os库详细介绍_Lua

这个库通过表os实现 os.clock () 功能:返回一个程序使用CPU时间的一个近似值 例如: 复制代码 代码如下: local x = os.clock(); print(os.clock()) local s = 0; for i = 1, 100000000 do       s = s + i; end print(string.format("elapsed time : %.2f\n", os.clock() - x)); 输出: 复制代码 代码如下: 0 elapse

译文:理解Java中的弱引用

不久之前,我面试了一些求职Java高级开发工程师的应聘者.我常常会面试他们说,"你能给我介绍一些Java中得弱引用吗?",如果面试者这样说,"嗯,是不是垃圾回收有关的?",我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述. 然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中 只有一个人真正了解这方面的知识.在面试过程中,我还尝试提示一些东西,来看看有没有人突然说一声&qu

10分钟带你理解Java中的弱引用_java

前言 本文尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法. 一. What--什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明:      弱引用对象的存在不会阻止它所指向的对象被垃圾回收器回收.弱引用最常见的用途是实现规范映射(canonicalizing mappings,比如哈希表).      假设垃圾收集器在某个

Lua教程之弱引用table_Lua

这次要介绍的内容比较少,就一个--弱引用table 1.无法超越人类智慧的智能--自动内存管理的缺陷 我们都知道,Lua是具备自动内存管理的,好吧,也许有些朋友不知道. 我们只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象. 问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现.   比如这样一个例子: 复制代码 代码如下: t = {};        -- 使用一个table作为t的ke

Lua中的闭包学习笔记_Lua

之前介绍 Lua 的数据类型时,也提到过,Lua 的函数是一种"第一类值(First-Class Value)".它可以: 存储在变量或 table (例如模块和面向对象的实现)里 复制代码 代码如下: t = { p = print } t.p("just a test!") 作为实参(也称其为"高阶函数(higher-order function)")传递给其他函数调用 复制代码 代码如下: t = {2, 3, 1, 5, 4} table

Lua中调用C++函数实例_Lua

到这为止,大家对Lua和C++之间的通信应该有些熟悉了,今天我们来介绍最后一个操作. (旁白:什么?最后一个?要结束了么?太好了~!) 上一章传送门:http://www.jb51.net/article/55097.htm 1. Lua调用C++的函数 Lua要调用C++的函数还是蛮方便的,首先,我们来创建一个c++函数先: 复制代码 代码如下: public: static int getNumber(int num); int HelloLua::getNumber( int num )

Lua中的运算符简明总结_Lua

1. 数字运算 支持 +, -, *, /,^ . 这些运算符的操作数都是实数. 2. 连接运算 连接两个字符串,用".."运算符. 如果操作数为数字,Lua将数字转换成字符串. 3. 赋值运算 多变量一起赋值: 复制代码 代码如下: a,b,c,d = 'www.jb51.net', 'Q群: 14624678 ′,1,2 变量交换: 复制代码 代码如下: a,b=b,a 在默认情况下,变量总是认为是全局的.假如需要定义局部变量,则在第一次赋值的时候,需要用local说明.如: 复制