Lua C Api Metatables:返回__newindex的约定

时间:2013-08-09 08:50:59

标签: lua

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

似乎在__index return 0的上下文中表示无法查找值,我想知道__newindex中是否有类似的构造可以避免忽略或手动错误投掷

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

Lua预计newindex元方法没有返回值。请参阅http://www.lua.org/manual/5.2/manual.html#2.4

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