¿Cuál es la forma correcta de hacer un condicional que verificaciones de algo está o no está vacío en Lua? if x == ""
y f x ~= ""
parece que no funciona.¿Cómo comprobar si un valor está vacío en Lua?
Respuesta
Lua es lenguaje basado en tipos dinámicamente.
Cualquier variable puede contener uno de los siguientes tipos: nil, boolean, número, cadena, tabla, función, hilo, o userdata.
Cualquier variable en una tabla (incluyendo _G
, la tabla donde residen las globales) sin un valor da un valor de nil
cuando se indexa. Cuando establece una variable de tabla en nil
, esencialmente "lo declara" (eliminando por completo la entrada de la memoria).
Cuando se declara una variable local
, si no se asigna inmediatamente, se le asigna un valor de nil
. A diferencia de la variable de tabla, cuando establece una variable local
en nil
, no lo hace "undeclare" (solo tiene un valor de nil
).
En Lua, una cadena vacía (""
) sigue siendo un "valor" - es simplemente una cadena de tamaño cero.
Creo que decir "_Cuando configura una variable en cero, esencialmente" declara "it_" es un poco inexacto — 'nil' es un valor verdadero excepto en las tablas, por ejemplo, una variable local con un valor' nil' todavía sombras variables en los ámbitos circundantes ... – snogglethorpe
Tiene toda la razón; esa declaración estaba dirigida a pares de tablas, no a todas las variables en general. La respuesta ha sido modificada para reflejar esto. – Deco
@snogglethorpe 'cuando fuera nulo entonces \t de impresión ("nula es verdad") demás \t de impresión ("nulo no es verdad!") end' -> nil no es verdad! – handle
Probablemente tenga espacios, líneas nuevas u otros caracteres no visibles en su cadena. Entonces piensas que está "vacío", pero no lo es. Esto generalmente ocurre cuando está tomando la información del usuario, y tiene que escribir "enter" para finalizar; la "enter" termina en la cadena.
Lo que necesita es una función que le indique si la cadena está "en blanco", ya sea vacía, o una lista de espacios/pestañas/líneas nuevas. He aquí una manera de hacerlo:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
Uso:
if isBlank(x) then
-- ...
end
eso es bastante ineficiente; 'not not string.find (x," ^% s * $ ")' – daurnimator
Bueno, su versión es definitiva (una vez que incluye la llamada omitida de tostring). No estoy tan seguro de que sea significativamente más rápido. ¿Por qué piensas eso? – kikito
'string.gsub' asignaría mucha memoria para esa operación (una nueva cadena que se redimensiona varias veces, uno o dos almacenamientos intermedios para reemplazos) en comparación con' string.find'. – Deco
Recientemente me encontré con este problema también. LuaSQL devolvía cadenas vacías si el valor de la base de datos estaba 'en blanco' (no nulo). Un enfoque raro, pero así es como lo resolví:
if (string.len(x) >= 1) then
...
end
- 1. ¿Cómo comprobar si UITextFields está vacío?
- 2. ¿Cómo comprobar si $ _GET está vacío?
- 3. ¿Cómo comprobar si un archivo está vacío en Bash?
- 4. Cómo comprobar si un directorio está vacío en Java
- 5. C# DataGridView Comprobar si está vacío
- 6. Cómo comprobar si hay un vacío Gridview
- 7. ¿Cómo comprobar si HTML sessionStorage no está vacío?
- 8. ¿Cómo comprobar si el objeto JSON está vacío en PHP?
- 9. ¿Cómo comprobar si el objeto JSON está vacío en Java?
- 10. ¿Cómo comprobar si una tabla contiene un elemento en Lua?
- 11. Cómo comprobar si mysql devuelve nulo/vacío
- 12. cómo comprobar si el campo de archivo está vacío?
- 13. Comprobar si el directorio está vacío en Ruby
- 14. Navaja MVC3: cómo comprobar si el modelo está vacío
- 15. Comprobar si el buzón está vacío en erlang
- 16. Cómo comprobar que ImageField está vacío
- 17. compruebe si NSNumber está vacío
- 18. ¿Cómo verificar si jQuery datepicker está vacío?
- 19. Cómo comprobar si el valor está en la lista
- 20. ¿Cómo comprobar si un script está incluido a través de dofile() o ejecutar directamente en Lua?
- 21. ¿Cómo verifico si un repositorio está vacío?
- 22. ¿Cómo comprobar si un int no es nulo o está vacío?
- 23. JS jQuery - comprobar si el valor está en serie
- 24. ¿Cómo probar si un DataSet está vacío?
- 25. Cómo verificar si dynamic está vacío.
- 26. Comprobación de si un vector está vacío
- 27. Comprobar si cuadro de texto tiene valor vacío
- 28. recortar y comprobar si de entrada vacío
- 29. objetivo comprobar si el campo de texto está vacío
- 30. AS3: compruebe si un diccionario está vacío
¿Cómo se define "vacío"? –
significado vacío, no hay nada escrito en él. – Village
No puede "escribir" valores en variables. ¿Puedes dar una definición más precisa? Porque una variable que contiene la cadena '" "' no está "vacía". Tiene una cuerda. A saber '" "'. Que es una cadena válida Y por lo tanto, nada. –