Quelle est la bonne façon de faire une condition qui vérifie quelque chose est ou n'est pas vide dans Lua? if x == ""
et f x ~= ""
ne semble pas fonctionner.
Lua est un langage basé sur un type dynamique.
Toute variable peut contenir l'un des types suivants: nil , booléen , nombre , chaîne , table , fonction , thread ou données utilisateur .
Toute variable dans une table (y compris _G
, la table où résident les globaux) sans valeur donne une valeur de nil
lors de l'indexation. Lorsque vous définissez une variable de table sur nil
, elle la "déclare" essentiellement (en supprimant entièrement l'entrée de la mémoire).
Lorsqu'une variable local
est déclarée, si elle n'est pas affectée immédiatement, elle reçoit la valeur nil
. Contrairement à la variable de table, lorsque vous définissez une variable local
sur nil
, elle ne pas la "annule" (elle a juste une valeur de nil
).
Dans Lua, une chaîne vide (""
) est toujours une "valeur" - c'est simplement une chaîne de taille zéro.
J'ai récemment rencontré ce problème également. LuaSQL renvoyait des chaînes vides si une valeur de base de données était "vide" (non nulle). Une approche hacky, mais voici comment je l'ai résolu:
if (string.len(x) >= 1) then
...
end
Vous avez probablement des espaces, des sauts de ligne ou d'autres caractères non visibles dans votre chaîne. Vous pensez donc qu'il est "vide", mais ce n'est pas le cas. Cela se produit généralement lorsque vous prenez une entrée de l'utilisateur, et doit taper "enter" pour terminer - "enter" finit dans la chaîne.
Ce dont vous avez besoin est une fonction qui vous indique si la chaîne est "vide" - soit vide, soit une liste d'espaces/tabulations/sauts de ligne. Voici une façon de procéder:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
Usage:
if isBlank(x) then
-- ...
end