Заметки
nil не то же, что отсутствие значения
Поэтому если вы встретите в каких-то функциях return nil
, то не спешите удалять эту строку. Возможно, она там не просто так
Например tonumber(nil)
вернет nil, а tonumber()
(без nil) вызовет ошибку
Проверить что nil это действительно nil, а не отсуствие аргумента в функции можно вот так: select("#", ...)
. Функция вернет 1, если в параметрах передан nil и вернет 0, если ничего не указано
Получаем только одно значение из функции
Есть функции, которые возвращают несколько значений, например next()
(возвращает key, value).
-- В этом примере мы получим оба значения
local key, v = next({kek = "lol"})
print(key, v) -- "kek", "lol"
-- В этом только первое. Остальные отсекутся
local key, v = ( next({kek = "lol"}) ) -- скобочки
print(key, v) -- "kek", nil
Можно использовать для return
одного значения. Полезно, когда делаешь return string.match/gsub
local function two() return 1, 2 end
local function one() return ( two() ) end
print( one() )
Реальный пример, когда это может быть полезно
local function replace_spaces(str)
if type(str) ~= "string" then return false, "Ожидалась строка" end
return str:gsub(" ", "_")
end
local newstring, err = replace_spaces("раз два пробела")
if err then
print("Ошибка:", err) -- "Ошибка: 2"
end