Niektóre funkcje Lua zwracają nil
, aby zasygnalizować użytkownikowi, że funkcja nie może wykonać jakiegoś zadania (np. tonumber()
, string.find()
).Powracanie 'nil' z funkcji Lua w C i zwracanie 0 wartości
W C returnig nil
odbywa się to tak:
int some_function(lua_State* L) {
...
if (some condition) {
lua_pushnil(L);
return 1;
}
...
}
Ja jednak zastanawiam się, czy to jest w porządku, aby wykonać następujące czynności zamiast:
int some_function(lua_State* L) {
...
if (some condition) {
return 0;
}
...
}
Jest krótszy. Spróbowałem i wydaje mi się, że działa, ale nie wiem, czy to projekt. Sprawdziłem kod źródłowy Lua i nie widzę tego wzoru, więc zastanawiam się, czy jest to uzasadnione.
Czy dwa różne sposoby zwrotu są równoważne z nil
?
(BTW, wiem wszystko o sygnalizacji błędów za pomocą wyjątków (czyli lua_error()
), więc proszę, nie wspominając go).
UPDATE:
widzę teraz, że istnieje subtelna różnica między dwiema metodami: print((function() end)())
nic by nie wydrukowało, podczas gdy print((function() return nil end)())
wyświetliłoby "zero". Nie wiem, jak ważne jest to.
"Przeanalizowałem kod źródłowy Lua i nie widzę tego powrotu 0 wzór" Jak ciężko wyglądałeś? Wszystkie funkcje biblioteczne Lua, które nie zwracają wartości (np. Print, table.insert, itp.) Zwracają 0 w swoich implementacjach C. – Mud
@Mud: Przykłady, które podajesz, 'print()' i 'table.insert()', nie mają znaczenia, ponieważ te funkcje nie powinny zwracać niczego. Mówię o funkcjach, które normalnie * zwracają * wartości zwracane, np. 'Tonumber()', a jeśli sprawdzasz ich źródło, zobaczysz, że robią 'lua_pushnil (L); return 1; '. –