【发布时间】:2013-08-09 19:40:02
【问题描述】:
我正在使用 Lua 的 C API 在 C 中实现一个元表。我想知道__newindex方法是否应该通过返回值来报告成功或失败,或者是否应该使用错误来处理。
似乎在__index和return 0的上下文中表示查找值失败,我想知道__newindex中是否有类似的构造可以避免忽略或手动抛出错误
【问题讨论】:
标签: lua
我正在使用 Lua 的 C API 在 C 中实现一个元表。我想知道__newindex方法是否应该通过返回值来报告成功或失败,或者是否应该使用错误来处理。
似乎在__index和return 0的上下文中表示查找值失败,我想知道__newindex中是否有类似的构造可以避免忽略或手动抛出错误
【问题讨论】:
标签: lua
Lua 不期望来自 newindex 元方法的返回值。见http://www.lua.org/manual/5.2/manual.html#2.4。
如果你的失败是致命的,只需在你的元方法中引发一个错误。
【讨论】:
从 C 返回一个值到 Lua 表示压入堆栈的结果数。当返回 0 时,在 Lua 中使用该方法的结果进行的任何分配都将是 nil。当您在__index 的上下文中返回0 时,您只是表明没有任何值被压入堆栈。您可以通过推送nil 并返回1 来获得相同的结果。
类似地,在__newindex 的上下文中,您从 C 中返回的值表示您已将多少结果压入堆栈。
【讨论】: