Каков правильный способ сделать условие, которое проверяет что-то или нет в Lua? if x == ""
и f x ~= ""
, похоже, не работают.
Как проверить, пусто ли в Lua?
Ответ 1
Lua - это язык с динамическим типом.
Любая переменная может содержать один из следующих типов: nil, boolean, number, string, table, function, thread или userdata.
Любая переменная в таблице (включая _G
, таблица, в которой находятся глобальные переменные) без значения, при индексировании присваивает значение nil
. Когда вы устанавливаете переменную таблицы в nil
, она существенно "ундекларирует" ее (полностью удаляя запись из памяти).
Когда объявляется переменная local
, если она не назначается сразу, ей присваивается значение nil
. В отличие от переменной таблицы, когда вы устанавливаете переменную local
в nil
, она не "декомпрессирует" ее (она имеет только значение nil
).
В Lua пустая строка (""
) по-прежнему является "значением" - это просто строка с нулевым размером.
Ответ 2
Недавно я столкнулся с этой проблемой. LuaSQL возвращал пустые строки, если значение базы данных было "пусто" (но не null). Хакерный подход, но вот как я его решил:
if (string.len(x) >= 1) then
...
end
Ответ 3
Вероятно, в вашей строке есть пробелы, символы новой строки или другие невидимые символы. Поэтому вы думаете, что это "пусто", но это не так. Обычно это происходит, когда вы берете ввод от пользователя и должны ввести "enter" для завершения - "enter" заканчивается в строке.
Вам нужна функция, которая сообщает вам, является ли строка пустой: либо пустой, либо список пробелов/вкладок/новых строк. Вот один из способов сделать это:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
Использование:
if isBlank(x) then
-- ...
end