某些Lua函数返回nil
以通知用户函数无法执行某些任务(例如,tonumber()
,string.find()
)。从C中的Lua函数返回'nil'与返回0值
在C,returnig nil
像这样做:
int some_function(lua_State* L) {
...
if (some condition) {
lua_pushnil(L);
return 1;
}
...
}
但是,我不知道这是正常的,而不是做如下:
int some_function(lua_State* L) {
...
if (some condition) {
return 0;
}
...
}
这是短。我试过了,它似乎有效,但我不知道这是否是设计。我检查了Lua的源代码,我没有看到这个return 0
模式,所以我不知道这是否合法。
是两种不同的方式返回nil
相同呢?
(顺便说一句,我都知道通过异常信号错误(即,lua_error()
),所以请不要客气。)
UPDATE:
我现在看到,有一个细微的差别在两种方法之间:print((function() end)())
将不打印任何内容,而print((function() return nil end)())
将打印“无”。我不知道这有多重要。
“我检查了Lua的源代码,我没有看到这个返回0模式”你看起来有多难?所有不返回值的Lua库函数(例如print,table.insert等)在它们的C实现中返回0。 – Mud
@Mud:你给出的例子'print()'和'table.insert()'是不相关的,因为这些函数不应该返回任何东西。我正在讨论通常返回值的函数,比如'tonumber()',如果你检查它们的源代码,你会看到它们执行'lua_pushnil(L);返回1;'。 –