问题标签 [lua-5.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
478 浏览

lua - 当块函数返回 nil 时 load() 的行为

来自Lua 5.1 文档load()

使用函数加载块func以获取其片段。每次调用都func必须返回一个与先前结果连接的字符串。返回空字符串、nil或无值表示块的结束。

根据我的测试,这实际上不是真的。或者,更确切地说,文档至少具有误导性。

考虑这个示例脚本:

输出是对在放弃之前返回的函数make_loader()返回的函数的连续调用次数,并返回一个不返回任何内容的函数。nilload()

如果要按面值获取文档,人们会期望此处的输出为“1”。但是,输出为“3”。这意味着调用 to 的参数load()直到它返回nil 3 次load()放弃。

另一方面,如果块函数立即返回一个字符串,然后nil在随后的调用中,它只需要一个nil停止加载:

正如我所料,这会打印“2”。

所以我的问题是:文档有错吗?出于某种原因,这种行为是否可取?这只是一个错误load()吗?(这似乎是故意的,但我找不到任何解释原因的文档。)

0 投票
1 回答
1405 浏览

c - 线程上的 Lua setfenv 似乎不起作用

我想在lua 状态下加载一些函数,然后能够从lua 线程调用这些函数。我正在尝试在线程上,以便它们创建的变量仅限于线程而不出现在全局环境中。setfenv

我在这里做错什么了吗?(我不想在线程上加载函数,因为它们可能很多,并且在状态上加载一次似乎是正确的方法)

- 编辑 -

解决方案,似乎是:

  • 为每个线程创建一个新的环境表(使用__index = _G
  • 对于在其中运行的每个函数,执行setfenv(f1, getfenv(0))
0 投票
2 回答
1098 浏览

lua - 传递给 lua_CFunctions 的 lua_State 指针是否保证指向与调用函数时相同的状态?

上下文:我正在研究一组绑定,我的许多函数都引用了“全局”Lua 状态。(在我正在开发的代码中,它实际上并不是全局的,而是特定运行时实例的局部变量,因此全局,所有回调函数都可以访问共享状态。)

Lua 文档似乎没有指定传递给 a 的指针lua_CFunction是否保证是指向与调用函数完全相同的lua_State对象的指针(直接通过lua_cpcall()或间接通过调用调用 C 函数的 Lua 代码)。

一个小测试表明指针引用了同一个对象,但我不知道这是否能保证。

示例输出:

我知道 Lua 为函数提供了一个堆栈,其中只包含该函数的参数,这让我有点不安,也许这可以通过向该函数传递一个跟踪独立堆栈的不同状态指针来实现。它也可以通过任何其他不需要不同的方式来实现lua_State——事实上我希望它确实以这种方式工作——但文档似乎并没有明确说明任何一种方式。

这些指针是否保证相等?如果不是,在什么情况下它们会有所不同?

0 投票
1 回答
2643 浏览

lua - 为什么 debug.getinfo(1) 的“名称”为零

我正在尝试组合一个 lua 测试框架,让您知道有问题的函数,但是当我从 loadstring 切换到 时_G,(我切换以便我的测试工具可以看到函数调用的结果)我的函数开始使用'nil' 代表函数名

为什么_G在下面的代码中检测不到当前函数的名称?另外,如何从 loadstring 获取返回结果(即来自 blah 调用的“false”)或在使用时设置函数名称_G(即告诉 lua 解释器函数名称应该是什么)?

我需要的主要是一种使用函数名称字符串调用函数的方法,能够在调用中看到函数名称(测试失败指向失败的函数,如 fname = 'blah' 在上面的代码)并能够得到返回值

0 投票
3 回答
3668 浏览

floating-point - 将带符号的 IEEE 754 浮点数转换为十六进制表示

我使用的是 Lua 的前端,不幸的是它已经过时了,所以我在这里坚持使用 5.1 版,这意味着bit32库无法访问(我可能可以用来转换它)。

所以我想知道是否有人知道我可以实现浮点到二进制(数字)函数或者更好的是浮点到十六进制的方法。到目前为止,我能想到的最好的方法是十进制到二进制/十六进制函数......

0 投票
1 回答
770 浏览

lua - Lua 5.1 setfenv() 表仍在全局空间中加载

我一直在尝试使用 setfenv() 以便将一个块加载到全局环境之外的环境中,但我遇到了一些麻烦。以下是我正在运行的代码:

我期望这个的输出是:


相反,我得到:

表明“sandbox()”正在将表加载到全局空间中,即使我在执行“sandbox()”之前使用“setfenv(sandbox, scriptTable)”将沙盒的环境设置为“scriptTable”。

我已经浏览了其他帖子中提到的沙盒示例,但我仍然得到相同的结果。知道我可以做些什么来在它自己的环境中加载脚本而不污染全局环境吗?

0 投票
1 回答
768 浏览

lua - 在 IRC Bot 中添加 SASL Auth

如何在我的 Lua 5.1 IRC Bot 上添加 sasl 身份验证?现在它会向 Nickserv 发送一条消息以进行识别。

有没有办法添加 SASL 身份验证?我使用 lua 套接字模块连接到 IRC。完整的源代码可以在https://github.com/wolfy1339/Wolfybot找到

0 投票
0 回答
41 浏览

python - LUA 5.1 和 python 类

你知道当你在 python 中创建一个类时你是怎么做的,

我的问题是你将如何在 lua 中做到这一点?lua中甚至有课程吗?如果是这样的话,Lua 中的 python 函数就像 __init__() 我刚刚开始学习 Lua 5.1 并且我注意到我还没有上过课。例如,用于在 Lua 中创建类的 Luas 表系统。

0 投票
1 回答
160 浏览

while-loop - lua5.1 循环错误结束预期(关闭 'while' )

无论我把“结束”放在哪里,它仍然会给我这个错误,

代码在这里,

你能告诉我或告诉我我做错了什么吗?

0 投票
2 回答
316 浏览

lua - Lua:是否可以从循环内部减少迭代器?

上面的代码旨在生成一个从 1 到“大小”的随机数数组,避免重复值。如果新生成的值出现在数组中的某个位置之前,我试图通过再次重复顶级“for”循环来实现这一点——通过减少它的迭代器。不知何故,它不起作用。为什么?

从循环内部修改迭代器值是不可能的吗?

数组中具有重复值的示例输出: