while print pairs for lua conditional

print - ¿Cómo comprobar si un valor está vacío en Lua?



pairs lua (3)

¿Cuál es la forma correcta de hacer un condicional que verifique algo o no esté vacío en Lua? if x == "" y fx ~= "" no parece funcionar.


Lua es un lenguaje dinámicamente basado en tipos .
Cualquier variable puede contener uno de los siguientes tipos: nil , booleano , número , cadena , tabla , función , hilo o datos de usuario .
Cualquier variable en una tabla (incluyendo _G , la tabla donde residen los globales) sin un valor da un valor nil cuando se indexa. Cuando configura una variable de tabla en nil , esencialmente la "no declara" (eliminando la entrada de la memoria por completo).
Cuando se declara una variable local , si no se asigna de inmediato, se le asigna un valor de nil . A diferencia de la variable de tabla, cuando establece una variable local en nil , no la "anula" (solo tiene un valor de nil ).

En Lua, una cadena vacía ( "" ) sigue siendo un "valor", es simplemente una cadena de tamaño cero.


Probablemente tenga espacios, nuevas líneas u otros caracteres no visibles en su cadena. Entonces piensas que es "vacío", pero no lo es. Esto suele suceder cuando está recibiendo información del usuario y tiene que escribir "enter" para finalizar: "enter" termina en la cadena.

Lo que necesita es una función que le diga si la cadena está "en blanco", ya sea vacía o una lista de espacios / tabulaciones / nuevas líneas. Aquí hay una forma de hacerlo:

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

Uso:

if isBlank(x) then -- ... end


Recientemente me encontré con este problema también. LuaSQL estaba devolviendo cadenas vacías si un valor de la base de datos estaba ''en blanco'' (no nulo). Un enfoque hacky, pero así es como lo resolví:

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