问题标签 [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 投票
1 回答
141 浏览

unit-testing - 在 Lua 中测试后重置 package.loaded

我正在 Lua 中开发单元测试,这些测试的主要部分是更改 package.loaded。这从

以及我修改在测试开始之前加载的 package.loaded 条目的情况。

我想package.loaded在每次测试后重置。但我很难过。我尝试了包装require,解决了一些问题,但是并没有解决第二个和第三个例子的问题。如何package.loaded在测试之前正确创建保存点并在开始新测试之前重新加载该保存点?package.loaded或者只是在interpeter开始后回滚到那个?

0 投票
1 回答
71 浏览

function - 你如何“沙盒”功能?

目前,我正在用 Lua 编写一个沙箱。到目前为止它正在工作,但我可以使用getfenv该功能来获取沙箱之外的范围。对于我的沙盒,我用可信函数和库填充了一个空表。但是,使用诸如 之类的函数print,您可以使用它getfenv来获取该范围内的全局变量。例如:

这显然可以让“对手”绕过沙箱。

0 投票
1 回答
90 浏览

lua - 将字符串作为 lua 代码运行以调用仅具有函数名称的函数

我正在为处理输入事件的辅助函数制作动态回调表。我想在a(testString)执行时functionTable[1](testString)执行或允许直接从字符串运行它。

我应该怎么做?

(对于 Lua 5.1)

0 投票
1 回答
82 浏览

loops - Roblox:我怎样才能让这个脚本正常工作?

我目前正在为我的游戏编写脚本,但我有一个问题。我的脚本无法正确执行,只是将边缘放在地图之外!如果有人可以调试这将是非常好的。 脚本助手链接

0 投票
4 回答
322 浏览

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 中似乎是最简单的,因为在测试时您仍然可以依赖“正常错误”,并且您的功能有些简单,但不知何故,在我的脑海中感觉像是一种反模式。
0 投票
2 回答
293 浏览

lua - 如何创建具有唯一 ID 的表条目并使用该 ID 访问它们..?

嗨,我需要在 lua 中创建一个表,每个条目(记录)都可以用唯一的 id 表示

像这样我想插入和访问请帮助我解决这个谜语

0 投票
1 回答
54 浏览

lua - 为什么 ChunkSpy .function 部分有四个参数?

使用 ChunkSpy 时,我发现一件事让我很困惑。让我们看看下面的例子

既然是0 upvalues, 0 params, 2 stacks,为什么里面有四个参数.function 0 0 2 2

在另一个例子中,我们可以看到

所以我猜第一个参数是upvalues,但是第二个有什么用呢?

0 投票
1 回答
67 浏览

unicode - lua 5.1 将utf8 俄语字符翻译成unicode?

您好我想知道是否可以在 lua 5.1中Привет翻译。\u041f\u0440\u0438\u0432\u0435\u0442这个游戏里面没有utf8库,也没有unicode库。我在 github 上寻找了一个为我做这个的库,但我找不到适合这个的库

0 投票
0 回答
15 浏览

lua-api - 元表作为表字段的值

我只是看到一些用于 lua 5.1 的 C 库的源代码。简化版是这样的(我添加了我的理解的评论):

在 lua 中是这样使用的:

我在 lua 方面几乎没有经验,但据我所知 - 元表应该设置为另一个表、用户数据或字符串等值的元表。使用 metatable 作为表字段的值对我来说看起来很奇怪。这是错误还是需要什么?

0 投票
0 回答
153 浏览

lua - lua 5.1中的uint64到十六进制

嘿,我无法正确进行此转换。我使用下面的代码

RawGUID 是我需要转换为十六进制字符串的示例,其余变量只是相同数字的转换。该代码适用于 64 位以下的任何内容。

老实说,为了实现我的目标,我需要一个十六进制字符串来使我的其余代码正常工作

我得到的结果:F13079A800000000

我想要的结果:F13079A80000002B