在Lua中对条件进行检查是否为空的正确方法是什么? if x == ""
和f x ~= ""
似乎不起作用。
答案 0 :(得分:16)
Lua是一种基于动态类型的语言
任何变量都可以包含以下类型之一: nil ,布尔,数字,字符串,表,功能,线程或 userdata 。
表中的任何变量(包括_G
,全局所在的表)没有值,在索引时会给出nil
的值。当您将表变量设置为nil
时,它基本上“取消声明”它(完全从内存中删除条目)。
声明local
变量时,如果未立即赋值,则赋值为nil
。与表变量不同,当您将local
变量设置为nil
时,它不“取消声明”它(它的值只有nil
)。< / p>
在Lua中,空字符串(""
)仍然是一个“值” - 它只是一个大小为零的字符串。
答案 1 :(得分:3)
我最近也碰到过这个问题。如果数据库值为“空白”(非空),则LuaSQL返回空字符串。一个hacky方法,但这是我如何解决它:
if (string.len(x) >= 1) then
...
end
答案 2 :(得分:1)
您的字符串中可能包含空格,换行符或其他不可见字符。所以你认为它是“空的”,但事实并非如此。这通常发生在您从用户那里获取输入时,必须输入“enter”才能完成 - “enter”最终会出现在字符串中。
您需要的是一个函数,它告诉您字符串是否为“空白” - 空或空格/制表符/换行符列表。这是一种方法:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
用法:
if isBlank(x) then
-- ...
end