c - 在 Lua 中,我应该如何处理来自 C 的从零开始的数组索引?

标签 c lua lua-table

在 C 代码中,我有一个数组和一个用于在其中查找的从零开始的索引,例如:

char * names[] = {"Apple", "Banana", "Carrot"};
char * name = names[index];

在嵌入式 Lua 脚本中,我可以通过 getIndex() 函数访问 index,并希望复制数组查找。考虑到 Lua 的基于 1 的数组,是否有达成共识的“最佳”方法?

例如,我可以创建一个 Lua 数组,其内容与我的 C 数组相同,但这需要在索引时加 1:

names = {"Apple", "Banana", "Carrot"}
name = names[getIndex() + 1]

或者,我可以通过使用更复杂的表格来避免加 1 的需要,但这会破坏 #names 之类的东西:

names = {[0] = "Apple", "Banana", "Carrot"}
name = names[getIndex()]

推荐什么方法?

编辑:感谢您到目前为止的回答。不幸的是,在 getIndex 函数中将索引加 1 的解决方案并不总是适用。这是因为在某些情况下索引是“众所周知的”——也就是说,可能会记录索引 0 表示“Apple”等等。在这种情况下,应该首选上述解决方案中的一种,还是有更好的选择?

编辑 2:再次感谢您的回答和评论,他们确实帮助我思考了这个问题。我已经意识到可能有两种不同的情况会出现问题,而理想的解决方案可能因每种情况而异。

在第一种情况下,例如,考虑一个可能不时不同的数组和一个仅与当前数组相关的索引。索引在代码之外没有任何意义。 Doug Currie 和 RBerteig 是绝对正确的:数组应该从 1 开始并且 getIndex 应该包含一个 +1。如前所述,这允许 C 和 Lua 端的代码是惯用的。

第二种情况涉及有意义的索引,并且可能是一个始终相同的数组。一个极端的例子是 names 包含 “Zero”、“One”、“Two”。在这种情况下,每个索引的期望值是众所周知的,我觉得让 Lua 端的索引以一为基础是不直观的。我认为应该首选其他方法之一。

最佳答案

使用从 1 开始的 Lua 表,并将 + 1 埋在 getIndex 函数中。

关于c - 在 Lua 中,我应该如何处理来自 C 的从零开始的数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16164149/

相关文章:

c - 运行时检查失败 #2 - 变量 'str' 周围的堆栈已损坏。错误?如何纠正?

c++ - Luabind:派生类作为参数

random - Redis Lua 脚本 math.random

lua - 将 nil 附加到 Lua 序列

Lua 错误 - 需要删除的错误参数 #1

memory-management - 表、嵌套表的 Lua 垃圾收集

c - 字符串文字与 const char[] 或 char[] 之间的区别

c - 如何在C中将非常大的二进制转换为十进制

c - 指针规范

Lua 类保留旧值