问题标签 [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.
unit-testing - 在 Lua 中测试后重置 package.loaded
我正在 Lua 中开发单元测试,这些测试的主要部分是更改 package.loaded。这从
到
以及我修改在测试开始之前加载的 package.loaded 条目的情况。
我想package.loaded
在每次测试后重置。但我很难过。我尝试了包装require,解决了一些问题,但是并没有解决第二个和第三个例子的问题。如何package.loaded
在测试之前正确创建保存点并在开始新测试之前重新加载该保存点?package.loaded
或者只是在interpeter开始后回滚到那个?
function - 你如何“沙盒”功能?
目前,我正在用 Lua 编写一个沙箱。到目前为止它正在工作,但我可以使用getfenv
该功能来获取沙箱之外的范围。对于我的沙盒,我用可信函数和库填充了一个空表。但是,使用诸如 之类的函数print
,您可以使用它getfenv
来获取该范围内的全局变量。例如:
这显然可以让“对手”绕过沙箱。
lua - 将字符串作为 lua 代码运行以调用仅具有函数名称的函数
我正在为处理输入事件的辅助函数制作动态回调表。我想在a(testString)
执行时functionTable[1](testString)
执行或允许直接从字符串运行它。
我应该怎么做?
(对于 Lua 5.1)
loops - Roblox:我怎样才能让这个脚本正常工作?
我目前正在为我的游戏编写脚本,但我有一个问题。我的脚本无法正确执行,只是将边缘放在地图之外!如果有人可以调试这将是非常好的。 脚本助手链接
error-handling - 使用 lua 的 error(.., level) 是一种反模式吗?
Lua 5.1 的 API 提供了一个error()函数,它接受一个字符串(错误消息)和一个“级别”。
我的理解是level
,可以让您向上移动调用堆栈,因此您可以提供更好的错误报告,尤其是在将模块作为 API 交付时。
例如,假设用户api_function(x)
使用x = nil
. 这将是一个错误,但 API 直到它的代码相当多才知道。
它可能会导致这个调用堆栈:
api_string.lua:66 error: value is nil
如所写,当用户真正想看到“不错”的错误时,用户会看到类似的内容user_file.lua:30 error: value is nil
。(“这个错误是我的错还是 API 中的错误?”)
现在,我们可以将代码更改为“弹出调用堆栈”,
这将返回“不错”的错误,但是,想象一下您也可以handle_when_x_string
更直接地调用(除了糟糕的 API 设计),
现在我们的“流行级别”是不正确的。也许在这个例子中,它会简单地弹出到顶部并停止尝试,但“错误级别”的原则至少仍然令人不舒服,它甚至可能会“弹出”用户导致错误的地方。
我可以看到一些解决方案:
- 不要设置级别,只是假设用户足够聪明,可以解决问题。
- 在 pcall 中包装 api 入口点 (
api_function
&another_api_fn
) 以下的任何内容,捕获任何错误并使用已知的“良好”级别值重新冒泡。 - 永远不要在较低的 api 函数中出错,总是
return nil, error
或类似的模式,然后检查它api_function
并根据需要采取行动。
我的问题是:
- 返回错误的级别是否有问题?只是“是的,随便”一个数字似乎很糟糕,希望它是好的。
- 如果这是一个问题,什么时候设置级别是一个好习惯(可能超过 0 会禁用位置报告)
- 如果有的话,哪些解决方案是最佳实践?我应该怎么做才能写出更好的可维护代码?包装在 pcall 中似乎是最简单的,因为在测试时您仍然可以依赖“正常错误”,并且您的功能有些简单,但不知何故,在我的脑海中感觉像是一种反模式。
lua - 如何创建具有唯一 ID 的表条目并使用该 ID 访问它们..?
嗨,我需要在 lua 中创建一个表,每个条目(记录)都可以用唯一的 id 表示
像这样我想插入和访问请帮助我解决这个谜语
lua - 为什么 ChunkSpy .function 部分有四个参数?
使用 ChunkSpy 时,我发现一件事让我很困惑。让我们看看下面的例子
既然是0 upvalues, 0 params, 2 stacks
,为什么里面有四个参数.function 0 0 2 2
在另一个例子中,我们可以看到
所以我猜第一个参数是upvalues,但是第二个有什么用呢?
unicode - lua 5.1 将utf8 俄语字符翻译成unicode?
您好我想知道是否可以在 lua 5.1中Привет
翻译。\u041f\u0440\u0438\u0432\u0435\u0442
这个游戏里面没有utf8库,也没有unicode库。我在 github 上寻找了一个为我做这个的库,但我找不到适合这个的库
lua-api - 元表作为表字段的值
我只是看到一些用于 lua 5.1 的 C 库的源代码。简化版是这样的(我添加了我的理解的评论):
在 lua 中是这样使用的:
我在 lua 方面几乎没有经验,但据我所知 - 元表应该设置为另一个表、用户数据或字符串等值的元表。使用 metatable 作为表字段的值对我来说看起来很奇怪。这是错误还是需要什么?
lua - lua 5.1中的uint64到十六进制
嘿,我无法正确进行此转换。我使用下面的代码
RawGUID 是我需要转换为十六进制字符串的示例,其余变量只是相同数字的转换。该代码适用于 64 位以下的任何内容。
老实说,为了实现我的目标,我需要一个十六进制字符串来使我的其余代码正常工作
我得到的结果:F13079A800000000
我想要的结果:F13079A80000002B