Я'вэ некоторые в настоящее время некоторые Луа код, используя следующий синтаксис:
if (foo == nil or foo == '') then
foo = "some default value"
end
Цель условие if, чтобы проверить Foo является ни пустой строкой, ни нулевую ценность.
Может ли этот код быть упрощена в одном, если вместо теста два?
этот код может быть упрощен в случае, если вместо теста два?
"ноль" и''
различные значения. Если вам нужно проверить что 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 (во всяком случае на моей машине), но разница мизерная. Я'd переход с первой на ясность'ы ради.