一部の Lua 関数nilは、関数が何らかのタスクを実行できなかったことをユーザーに通知するために返されます (例: tonumber()、string.find())。
C では、returnignilは次のように行われます。
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同等のものを返す2つの異なる方法はありますか?
(ところで、私は例外(つまり、lua_error())を介してエラーを通知することについてすべて知っているので、言及しないでください。)
アップデート:
2 つの方法には微妙な違いがあることがわかりました。print((function() end)())何も出力しないのに対し、print((function() return nil end)())「nil」を出力します。これがどれほど重要かわかりません。