vinagre saber reconocer plata oro limon laminado forma con como chapa casera alpaca 14k string lua

string - reconocer - como saber si es plata con limon



Comprueba si una cadena no es nula o está vacía en Lua (2)

Actualmente tengo algunos códigos Lua con la siguiente sintaxis:

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

El objetivo de la condición if es probar foo no es una cadena vacía, ni un valor nulo.

¿Se puede simplificar este código en una prueba si no en dos?


¿Se puede simplificar este código en una prueba si no en dos?

nil y '''' son valores diferentes. Si necesita probar que s no es ninguno de los dos, IMO debe comparar con ambos, porque hace que su intento sea más claro.

Eso y algunas alternativas, con su bytecode generado:

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

El segundo es el más rápido en Lua 5.1 y 5.2 (en mi máquina de todos modos), pero la diferencia es pequeña. Yo iría con el primero por claridad.


Una cosa simple que podrías hacer es abstraer la prueba dentro de una función.

local function isempty(s) return s == nil or s == '''' end if isempty(foo) then foo = "default value" end