【发布时间】:2012-02-02 05:11:51
【问题描述】:
我使用 Lua 作为我的 C++ 应用程序的数据描述语言。我有一堆使用 SLB 2.0 绑定到 Lua 的 C++ 类。我绑定了诸如“SetPos”或“SetName”之类的方法。我使用以“pos”或“name”作为键值的表来指定位置或名称(例如)。我希望能够获取密钥,添加“set”,然后调用该方法(如果存在)(可能不存在)。那可能吗?如果有,有什么建议吗?
我知道我可以将绑定的方法设为小写,但我宁愿将它们与绑定的方法保持一致(尽管这可能是我的后备)。我可以尝试根据我的命名标准构建方法名称,但不区分大小写不太容易出错。
我觉得应该是 Lua 的一个棘手的部分,可以使用元表解决这个问题,但我自己无法解决。
有什么建议吗?
谢谢!
【问题讨论】:
-
我对 SLB 不熟悉。您是否有一张表,其中包含以某种方式绑定到您的 C++ 的函数?如果你有一个充满函数的表,当然可以做你想做的事,因为你可以定义
__indexmetatable 方法来对你的表进行不区分大小写的搜索以查找匹配的方法并返回它。也就是说,你为什么还需要这个? Lua 函数通常是区分大小写的,所以我认为让你的函数保持原样没有问题。 -
我会强烈建议采用并遵守两个地方的名称完全相同(+/-
set前缀)的一致性政策。 -
我想对案例有点松懈的原因是,如果我在案例中犯了错误,我不会知道直到运行时。显然不是一个表演停止者,但它会很好。至于为什么我首先要这样做,原因是我想在我的 lua 文件中(例如在定义数组中)获取一个变量(name = "blah"),并将其映射到一个调用到一个方法(myObj.SetName("blah"))。