Lua 弱引用Table(weak table)

简介

弱引用table(weak table)是用户用来告诉Lua一个引用不应该阻碍对该对象的回收。所谓弱引用,就是一种会被垃圾收集器忽视的对象引用。
如果一个对象的引用都是弱引用,该对象也会被回收,并且还可以以某种形式来删除这些弱引用本身。
Lua中的GC

弱引用table有3种类型

1、具有弱引用key的table;
2、具有弱引用value的table;
3、同时具有弱引用key和value的table;

table的弱引用类型是通过其元表中的__mode字段来决定的。
这个字段的值应为一个字符串:
如果包含’k’,那么这个table的key是弱引用的;
如果包含’v’,那么这个table的value是弱引用的;
弱引用table中只有对象可以被回收,而像数字、字符串和布尔这样的“值”是不可回收的

例子:文档修饰器

local docstrings = setmetatable({}, {__mode = "kv"})
function document(str)
  return function(obj) docstrings[obj] = str; return obj end
end
function help(obj)
  print(docstrings[obj])
end
document[[Print the documentation for a given object]](help)
document[[Add a string as documentation for an object]](document)
f = document[[Print a hello message]](
  function()
    print("hello")
  end
)
f()
help(f)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lua语言中,table是一种非常重要的数据类型,它类似于其他编程语言中的数组、字典、哈希表等数据结构。Lua中的table可以存储任何类型的值,包括其他table。 以下是常用的table方法: 1. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 2. table.insert(table, [pos,] value):在table中插入一个元素,pos表示插入的位置,value表示要插入的值。 3. table.remove(table [, pos]):从table中删除一个元素,pos表示删除的位置,默认删除最后一个。 4. table.sort(table [, comp]):对table中的元素排序,comp为比较函数,可选。 5. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 6. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 7. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 8. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。 9. table.concat(table [, sep [, i [, j]]]):将table中的元素连接成一个字符串,sep为分隔符,i和j表示连接的起始和结束位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值