【问题标题】:Exporting a large-ish list of constants to Lua state将大量常量列表导出到 Lua 状态
【发布时间】:2012-07-21 11:57:43
【问题描述】:

使用 C(99),我有一个从 Lua 脚本加载 Lua 表的游戏。

技术方面没有问题,一切按预期工作。但是,C 核心使用许多常量来定义项目类型等。该脚本实际上提供了要加载的武器数据,为了清楚起见,应该使用相同的常量名称/值。 在 C 中,常量是诸如 #define ITEM_TYPE_EDIBLE 2 之类的东西。

所以,我的问题是:我怎样才能轻松地将一个长的(约 300 个定义)整数列表从 C 导出到 Lua?应该不止一个脚本使用该列表,虽然内存大小不是真正的问题,但我主要是为了方便。

我已经想到了这些可能的解决方案,但不确定从长远来看哪一个会更好:

  • A) 在处理所需脚本的 Lua 状态下手动创建嵌套表。
  • B) 手动创建一个包含常量的 lua 脚本,并将其导入到每个使用它们的脚本中。

那么,您认为最方便的方法是什么?如中,方便更新和在 Lua 方面使用,因此可以轻松编写 mods。项目加载都是在启动时完成的,所以如果它不是一个超快速的方法也没关系(例如,它不会滞后动作,只是启动时间)

哦,我正在使用 Lua 5.1,但我不反对使用 5.2,如果它使我的任务变得更容易的话。如果可能,也不反对以编程方式更新列表。

【问题讨论】:

  • 注意:听起来你应该使用枚举;不是#define。
  • @daumimator:为什么会这样? #defines 可以完美地满足我的需要,并且 IIRC 所有枚举都至少是整数大小。他们可能有什么优势?
  • IMO,C 代码应尽可能少地依赖预处理器。枚举不仅会给你更多的类型安全性,而且你可以枚举它们。

标签: c lua


【解决方案1】:
  • A) 在处理所需脚本的 Lua 状态下手动创建嵌套表。
  • B) 手动创建一个包含常量的 lua 脚本,并将其导入到每个使用它们的脚本中。

你忘了:

  • C) 手动创建一个包含常量的 Lua 脚本,然后当我创建我的 lua_State 时,立即导入它。这样,每个使用它们的脚本都可以假定它已被导入。

确实,我通常会将此脚本放在可执行文件本身或可执行文件加载的特殊文件中。

【讨论】:

  • 啊,所以如果我只是在状态下运行图块,表格应该保持正常吗?我想这也行得通,并且让模组制作者不必担心包含/导入额外内容。我试试这个方法,谢谢!
【解决方案2】:

我会编写一个脚本来生成一个 C 标头,其中所有整数常量都设置为enums。另一个 C 文件,它有一个改变 Lua 状态的函数,可以通过添加所有这些常量的表,或者将它们单独添加到全局范围内作为预定义的数字变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2020-11-26
    • 2019-07-13
    • 2013-05-05
    • 2013-10-06
    • 2019-08-13
    • 2016-09-20
    相关资源
    最近更新 更多