Lua C Api 元表:__newindex 的返回惯例。

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

__index上下文中,使用return 0表示未查找到值,我想知道是否有类似的构造在__newindex中可以避免忽略或手动抛出错误。

点赞
用户2634887
用户2634887

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

同样,在 __newindex 上下文中,从 C 返回值表示你推送到堆栈上的结果数。

2013-08-09 09:00:19
用户107090
用户107090

Lua 期望 newindex 元方法没有返回值。请见 http://www.lua.org/manual/5.2/manual.html#2.4

如果你的失败是致命的,就在你的元方法内部引发一个错误。

2013-08-09 11:40:02