Lua - 使用 C API 将脚本作为值进行评估

我想要在配置属性中嵌入 Lua 表达式,不仅仅是将脚本写在单独的文件中。

例如:

{
    "MyConfigProperty" : "你好 {{ app:getUserName() }} 先生!"
}

在这里,app:getUserName() 将会返回一个字符串,而包含在 {{ }} 中的整个脚本实际上只是一个表达式,可以被评估为一个字符串值。

如何“调用”这个 Lua 代码片段,以使其被评估并在堆栈中留下一个字符串值?

一个解决方案可能是将它包装成 "return (" + expression + ")",就像 Lua 文档中所建议的那样进行。运行它应该会在堆栈上留下评估结果的字符串值。但这可能是一个问题,因为我将无法确定何时返回了一个成功的字符串值,以及何时由于执行失败而返回了错误消息。

在不失去检测错误能力的情况下,我该如何使用 C API 来实现呢?谢谢。

编辑:另一个解决方案可能是在前面加上 return nil,,然后检查第一个返回值的类型。如果第一个返回值是 nil,则获取成功评估的值,即第二个返回值。否则,如果第一个返回值是一个字符串,就意味着出现了错误。或许还有更简洁的方法。

点赞