Lua 注册表与轻用户数据和引用有什么区别?

2024-03-05

因此,使用 Lua C API,您可以在注册表中保存 Lua 值并在以后检索它。有不同的方法可以做到这一点,您可以创建一个变量并使用它的指针作为注册表中的键,因为它始终是唯一的。您可以将指针作为轻用户数据推送。

您还可以使用创建参考LuaL_ref(L, LUA_REGISTRYINDEX)。其中一种相对于另一种有什么优势?什么时候使用引用,什么时候使用指针?

还有引用,既然叫引用,那么如果Lua垃圾收集器收集到Lua值,注册表中的值会是nil?如果Lua更新了Lua值,注册表中的值是否也会改变呢?


Lua 注册表只是另一个 lua 表,可以通过预定义的“特殊”索引轻松访问。我想你不需要解释 Lua 表与轻量级用户数据有何不同。
只要您可以将该密钥存储在 C/C++ 端,如何索引注册表并不重要。为了您的方便,已经有函数(luaL_ref/luaL_unref)为您提供易于存储和移动的整数密钥。

关于垃圾收集 - 规则始终相同。只要值存储在未标记为弱表的表中(注册表不是弱表),该值就不会被清除。您必须从注册表中显式删除值。

改变值将遵循正常的 Lua 规则。为某些变量分配新的不可变值不会更改存储在注册表中的值,即注册表不会跟随某些变量的更新。但是更改可变值(表等)的内容是可以的,因为注册表和变量将引用相同的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua 注册表与轻用户数据和引用有什么区别? 的相关文章

  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • Swashbuckle 在 ASP.NET Core 中失败并出现 NotSupportedException 异常

    我跟着这个关于如何在我的 asp net core 2 2 项目中添加 swashbuckle 当我运行该项目时 我收到以下错误 处理请求时发生未处理的异常 NotSupportedException HTTP 方法 GET 和路径 id
  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 在 C 的公共 API 函数中使用枚举参数是个好主意吗?

    我正在设计一个 C API 其中必须提供一种设置一些双值选项的方法 为了识别选项 我使用以下枚举 typedef enum OptionA OptionB Option 使用是一个好主意吗Option作为公共 API 函数中的参数类型 in
  • MPI_Gather 分段错误

    我有这个并行高斯消除代码 调用以下任一方法时会发生分段错误MPI Gather函数调用 我知道如果没有为任一缓冲区正确分配内存 可能会出现此类错误 但我看不出内存管理代码有什么问题 有人可以帮忙吗 Thanks Notes 该程序从一个 t
  • c++ 最大 std::string 长度由堆栈大小或堆大小决定?

    正如问题中所问 std string myVar 它可以容纳的最大字符是由堆栈还是堆决定的 谢谢 默认情况下 分配的内存为std string是动态分配的 注意std string has a max size 函数返回实现支持的最大字符数
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 使用 C# 从文本中删除数字

    我有一个要处理的文本文件 其中有一些数字 我只想要其中的文字 而不是其他任何东西 我成功删除了标点符号 但是如何删除数字呢 我想要使 用 C 代码 另外 我想删除长度大于 10 的单词 如何使用 Reg 表达式来做到这一点 您可以使用正则表
  • 将图像添加到 ASP.Net 中的单选按钮列表

    我正在尝试将图像添加到单选按钮列表控件 但它不起作用 我试过这个 RadioButtonList2 Items Add new ListItem String Format src Colors Dallas 625527 1 1 png
  • 如何将日期格式从 DD/MM/YYYY 或 MM/DD/YYYY 更改为 YYYY-MM-DD?

    我需要使用 C 更改日期字符串的格式 来自 06 16 2010 或 16 06 2010 至 2010 06 16 你能帮我实现这个目标吗 thanks 如果您已经将其作为DateTime use string x dt ToString
  • 将 LPTSTR 转换为要写入文件的字符串或 char *

    我想将 LPTSTR 转换为字符串或 char 以便能够使用 ofstream 将其写入文件 有任何想法吗 Use T2A http msdn microsoft com en us library 87zae4a3 VS 80 aspx宏
  • Web Api 2 在 OWIN 中间件中获取控制器和操作名称?

    如何在自定义 OWIN 中间件中检索 api 控制器名称和 api 操作名称 我可以在消息处理程序内部执行此操作 如下所示 var config request GetConfiguration var routeData config R
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • 为什么在 C++ 内存管理中术语“自动”和“动态”优于术语“堆栈”和“堆”?

    与 SO 上的许多问题和答案相关 我了解到最好将其生命周期管理为驻留在自动存储中而不是堆栈中的对象 此外 动态分配的对象不应该被称为驻留在堆上 而应该被称为驻留在动态存储中 我知道有自动 动态和静态存储 但从未真正理解自动堆栈和动态堆之间的
  • timeval_subtract 解释

    使用 timeval subtract 函数来查找两个 struct timeval 类型之间经过的时间 有人可以解释一下用于 通过更新 y 执行后续减法的进位 和其他部分的目的和逐步数学吗 我了解该函数的目的以及如何在程序中实现它 但我想
  • 隐藏 MediaPlayer 控件(Microsoft 媒体平台播放器框架)

    我在 c xaml 应用程序中使用 MMP PF 提供我自己的控制元素来处理播放器 这就是为什么我想隐藏 禁用出现在底部的本机控件 在屏幕截图的屏幕中间 这只是使用了一个主题 有人知道该怎么做吗 我没能找到合适的房产 像这样使用 axWin
  • 如何将curlpp 添加到我的项目中?

    我正在尝试从 vb net 过渡到 C 但我陷入了困境 我从下载了curpp这给了我一个 dll exp 和 lib 文件 我将包含这 3 个文件的目录添加到项目属性中的 附加库目录 链接器 gt 常规 接下来 我将 ws2 32 lib
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac

随机推荐

  • 用于本地主机上传和安装 WooCommerce 的 WordPress FTP 连接设置

    我无法上传 WooCommerce zip 文件并在本地主机上安装插件 每次我单击安装按钮时 WordPress 都会询问 FTP 凭据的连接信息 如下图所示 即使我输入 localhost 作为主机名 输入 admin 作为用户名 但它不
  • 如何删除存储库中的文件,同时在本地保留(和忽略)它们?

    我错误地将一些本地项目文件添加到 git 存储库并提交 推送它们 我想从远程存储库中删除这些文件 将它们保留在本地 并在将来的提交 推送中忽略它们 解决这个问题的最佳方法是什么 最干净的解决方案如下 git rm cached本地的额外文件
  • 如果使用 CreateResponse 扩展方法返回 Azure Function HttpResponseMessage,则执行测试时出错

    我的Azure功能代码如下 public static class MyHttpTriggerFunction public static async Task
  • PHP内容分离

    所以我们都知道 不仅在 PHP 中 您应该始终将代码与内容 设计 html 分开 我今天在这里看到有人说相反的 我的意思是 您不希望在更大的项目中使用其中之一 是吗 但是 将代码与内容分离的好方法是什么 我一直在使用一个简单的模板系统 主要
  • Angular2 中的 ViewChildren 装饰器可以与接口一起使用吗?

    我对 Angular 2 的理解是ViewChildren装饰器允许组件获取其他组件或指令的查询 当我知道组件的特定类型时 我可以让它在 Typescript 中工作 但我希望能够获得QueryList当我刚刚知道组件的接口时 这样 我就可
  • 如何提取大型文本文件中两个唯一单词之间的信息

    我有大约 150 个充满字符信息的文本文件 每个文件包含两个独特的单词 alpha 和 bravo 我想提取这些独特单词之间的文本并将其写入不同的文件 我可以手动按 CTRL F 组合这两个单词并复制它们之间的文本 我只是想知道如何使用程序
  • 将 Postgresql 与 Grails 一起使用:缺少序列或表:hibernate_sequence

    我在使用 Grails 2 0 和 Postgresql 9 1 时遇到问题 我正在尝试使用顺序 ID 映射现有数据库 但是 即使没有在域中创建任何类 我也会遇到错误 Compiling 1 source files Running Gra
  • 如何在 Liquid Haskell 中编写 log2 函数

    我正在尝试从 Liquid Haskell 学习book http ucsd progsys github io liquidhaskell tutorial book pdf 为了测试我的理解 我想写一个函数log2它接受 2 n 形式的
  • 让 GCC 优化手工组装

    试图让 GCC 不会每次生成加载 修改 存储操作 or 我定义了以下宏 define bset base offset mask bmanip set base offset mask define bclr base offset mas
  • Spring security 自定义身份验证过滤器,无需 web.xml

    使用注释和java配置 我不太清楚如何为spring security注册一个覆盖的过滤器 我想要实现的是自动登录而不显示登录表单 因为那时用户已经通过身份验证 因此 只会读取标头参数并使用 spring security 进行授权 这是我
  • 可以保留 ASIHTTPRequest 委托吗?

    保留子类的委托可以吗ASIHTTPRequest 我做了一个子类ASIHTTPRequest called JSONRequest 每个实例JSONRequest是它自己的委托 处理回调 并将它们传递给jsonDelegate 这是一个私有
  • 如何动态设置 JPA 标准查询的位置/命名参数?

    Hibernate 提供程序不会生成准备好的语句非字符串类型参数 除非它们设置为entityManager createQuery criteriaQuery setParameter Parameter p T t 默认情况下 如 Ecl
  • 在运行时绑定时,WPF UserControl 不会填充父容器

    我有一个带有 StackPanel 的窗口 并且 StackPanel 有一个 ContentControl 它在运行时获取绑定到它的 UserControl 在 MainWindow xaml 中
  • 测试 Mongoose Node.JS 应用程序

    我正在尝试为我的 Node 应用程序的部分内容编写单元测试 我正在使用 Mongoose 作为我的 ORM 我搜索了很多关于如何使用 Mongoose 和 Node 进行测试的信息 但没有找到任何内容 这些解决方案 框架似乎都是全栈的 或者
  • 使用 Jenkins 进行 Azure 配置

    作为 QA 管道 在 Jenkins 中 的一部分 目标是自动配置和配置虚拟机以运行 QA 测试 Jenkins 管道可以触发 Terraform 代码来自动配置 VM 和用于配置 VM 的 Ansible 代码 但是 诸如此类的问题rol
  • 使用 canvaskit 进行 Flutter Web 构建:无法加载 Image.network()

    I can t use the image URL from my domain but I can use the image URL from another domain like Facebook The error is 当将 S
  • 如何从 MySQL 表中的多个列中获取指定最小长度的所有不同单词?

    在 MySQL 5 6 数据库中我有表tablename其中有 包括其他 三个TEXT列 col a col b col c 我想从这三列中提取所有至少 5 个字符长的唯一单词 单词之间用空格分隔 我所说的 单词 是指任何非空格字符的字符串
  • 在故事板中重用 uiview xib

    我通常喜欢在界面生成器中创建和设计我的 uiview 有时我需要在 xib 中创建单个视图 该视图可以在故事板的多个视图控制器中重用 在故事板中重用并渲染 xib 使用 Swift 2 2 和 Xcode 7 3 1 进行测试 1 创建一个
  • 在 .NET 中打开 pdf

    在我们正在开发的应用程序中 我们正在尝试实现帮助 我们有一个 pdf 帮助文档 目前认为当用户单击帮助按钮时仅打开 pdf 是可以接受的 该应用程序是一个桌面应用程序 pdf 文件需要以某种方式包含在安装中并安装在本地计算机上 我本质上需要
  • Lua 注册表与轻用户数据和引用有什么区别?

    因此 使用 Lua C API 您可以在注册表中保存 Lua 值并在以后检索它 有不同的方法可以做到这一点 您可以创建一个变量并使用它的指针作为注册表中的键 因为它始终是唯一的 您可以将指针作为轻用户数据推送 您还可以使用创建参考LuaL