Подтвердить что ты не робот

Как проверить, пусто ли в Lua?

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

4b9b3361

Ответ 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