【问题标题】:Lua C Api Metatables: return conventions for __newindexLua C Api Metatables:__newindex 的返回约定
【发布时间】:2013-08-09 19:40:02
【问题描述】:

我正在使用 Lua 的 C API 在 C 中实现一个元表。我想知道__newindex方法是否应该通过返回值来报告成功或失败,或者是否应该使用错误来处理。

似乎在__indexreturn 0的上下文中表示查找值失败,我想知道__newindex中是否有类似的构造可以避免忽略或手动抛出错误

【问题讨论】:

    标签: lua


    【解决方案1】:

    Lua 不期望来自 newindex 元方法的返回值。见http://www.lua.org/manual/5.2/manual.html#2.4

    如果你的失败是致命的,只需在你的元方法中引发一个错误。

    【讨论】:

      【解决方案2】:

      从 C 返回一个值到 Lua 表示压入堆栈的结果数。当返回 0 时,在 Lua 中使用该方法的结果进行的任何分配都将是 nil。当您在__index 的上下文中返回0 时,您只是表明没有任何值被压入堆栈。您可以通过推送nil 并返回1 来获得相同的结果。

      类似地,在__newindex 的上下文中,您从 C 中返回的值表示您已将多少结果压入堆栈。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        相关资源
        最近更新 更多