一部のLua関数は、関数が何らかのタスクを実行できなかったことをユーザーに知らせるためにnil
を返します(例えば、tonumber()
、string.find()
)。 nil
をreturnig Cで CのLua関数から 'nil'を返す0の値を返します。
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;
}
...
}
それは短いです。私はそれを試して、それは動作するようだが、私はそれが設計であるかどうかわからない。私はルアのソースコードを調べましたが、このreturn 0
パターンが表示されないので、これを行うのが正当かどうか疑問です。
nil
を返す方法は2通りありますか?
(ところで、私はそれを言及しないでください(つまり、lua_error()
である)すべての例外を経由してのエラーをシグナルについて知っている。)
UPDATE:
私は今、微妙な違いがあることを見ます2つの方法の間:print((function() end)())
は何も印刷しませんが、print((function() return nil end)())
は「nil」を印刷します。これがどれほど重要かわかりません。
"私はLuaのソースコードを調べましたが、このリターン0のパターンは表示されません。値を返さないすべてのLuaライブラリ関数(print、table.insertなど)は、C実装で0を返します。 – Mud
@Mud: 'print()'と 'table.insert()'の例は何も返されないので、関係しません。私は通常、 'tonumber()'のような値を返す関数について話しています。もしそれらのソースを調べると 'lua_pushnil(L); 1を返します。 –