一部の 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」を出力します。これがどれほど重要かわかりません。