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

Проверьте, не является ли строка ниль или пуста в Lua

В настоящее время у меня есть некоторый код Lua, используя следующий синтаксис:

if (foo == nil or foo == '') then
    foo = "some default value"
end

Цель условия if - проверить foo - это не пустая строка, ни значение nil.

Можно ли упростить этот код в одном, если вместо двух тестов?

4b9b3361

Ответ 1

Одна простая вещь, которую вы можете сделать, - это абстрагировать тест внутри функции.

local function isempty(s)
  return s == nil or s == ''
end

if isempty(foo) then
  foo = "default value"
end

Ответ 2

Можно ли упростить этот код в одном, если вместо двух тестов?

nil и '' - разные значения. Если вам нужно проверить, что s нет, ИМО вы должны просто сравнить с обоими, потому что это делает ваше намерение наиболее ясным.

Это и несколько альтернатив с их созданным байт-кодом:

if not foo or foo == '' then end
     GETGLOBAL       0 -1    ; foo
     TEST            0 0 0
     JMP             3       ; to 7
     GETGLOBAL       0 -1    ; foo
     EQ              0 0 -2  ; - ""
     JMP             0       ; to 7

if foo == nil or foo == '' then end
    GETGLOBAL       0 -1    ; foo
    EQ              1 0 -2  ; - nil
    JMP             3       ; to 7
    GETGLOBAL       0 -1    ; foo
    EQ              0 0 -3  ; - ""
    JMP             0       ; to 7

if (foo or '') == '' then end
   GETGLOBAL       0 -1    ; foo
   TEST            0 0 1
   JMP             1       ; to 5
   LOADK           0 -2    ; ""
   EQ              0 0 -2  ; - ""
   JMP             0       ; to 7

Второй самый быстрый в Lua 5.1 и 5.2 (на моей машине в любом случае), но разница крошечная. Я пошлю первым ради ясности.