我正在使用Lua的C API在C中实现metatable。我想知道__newindex
方法是否应该通过返回值来报告成功或失败,或者是否应该通过使用错误来处理。
似乎在__index
return 0
的上下文中表示无法查找值,我想知道__newindex
中是否有类似的构造可以避免忽略或手动错误投掷
答案 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。
如果您的失败是致命的,只需在您的元方法中引发错误。