Вопрос по – Как проверить, является ли значение пустым в Lua?

16

Как правильно сделать условное выражение, которое проверяет что-то в Lua или не пусто?if x == "" а такжеf x ~= "" не похоже на работу.

Вы можете & quot; напечатать & quot; значения в переменные. Можете ли вы дать более точное определение? Потому что переменная, которая содержит"" Строка не является «пустой». У него есть строка. а именно"", Который является допустимой строкой. И поэтому не ничего. Nicol Bolas
Пустой смысл, в нем ничего не напечатано. Village
Как вы определяете «пустой»? Nicol Bolas
Хорошо, тогда мое значение пустого"". Village
Тогда каким образом ваш код не работает?x = ""; if x == "" then print("empty"); else print("not empty"); end действительный код Lua. И он всегда будет печатать «пусто». Ваша проблема в том, что она перестает работать, когда у вас нетx = "" часть? Или, иначе говоря, просто потому, чтоyou считать"" означает, что пустой не означаетLua делает. Nicol Bolas

Ваш Ответ

3   ответа
1

Возможно, в вашей строке есть пробелы, символы новой строки или другие невидимые символы. Таким образом, вы думаете, что он «пустой», но это не так. Обычно это происходит, когда вы принимаете ввод от пользователя и должны ввести «quot; enter» ». чтобы закончить - введите & quot; заканчивается в строке.

Что вам нужно, это функция, которая сообщает вам, является ли строка & quot; пустым & quot; - либо пустой, либо список пробелов / табуляции / новых строк. Вот один из способов сделать это:

function isBlank(x)
  return not not tostring(x):find("^%s*$")
end

Использование:

if isBlank(x) then
  -- ...
end
Error: User Rate Limit Exceedednot not string.find(x,"^%s*$")
Error: User Rate Limit Exceeded
string.gsubError: User Rate Limit Exceededstring.find.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

если значение базы данных было «пустым» (ненулевой). Хакерский подход, но вот как я его решил:

if (string.len(x) >= 1) then
    ...
end
16

Луа этоdynamically type-based language.
Любая переменная может содержать один из следующих типов:nil, boolean, number, string, table, function, thread, или жеuserdata.
Любая переменная в таблице (в том числе_Gтаблица, в которой находятся глобальные переменные) без значения дает значениеnil при индексации. Когда вы устанавливаете переменную таблицы вnil, это по существу "undeclares" это (удаление записи из памяти полностью).
Когдаlocal переменная объявляется, если она не назначена немедленно, ей присваивается значениеnil, В отличие от табличной переменной, когда вы устанавливаетеlocal переменная кnil, оно делаетnot & Quot; undeclare & Quot; это (это просто имеет значениеnil).

В Lua пустая строка ("") по-прежнему является «значением» - это просто строка нулевого размера.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededWhen you set a variable to nil, it essentially "undeclares" itError: User Rate Limit ExceedednilError: User Rate Limit ExceedednilError: User Rate Limit Exceeded
Error: User Rate Limit Exceededif nil then print( "nil is true") else print( "nil is not true!") endError: User Rate Limit Exceeded

Похожие вопросы