在Lua中,检查某个变量是否为空的正确方式是什么?if x == ""
和 f x ~= ""
似乎都不起作用。
在Lua中,检查某个变量是否为空的正确方式是什么?if x == ""
和 f x ~= ""
似乎都不起作用。
Lua是一种动态类型的语言。
任何变量都可以持有以下类型之一:nil、boolean、number、string、table、function、thread或userdata。
对于一个没有值的表中的任何变量(包括全局变量所在的_G
表),在索引时都返回nil
。当你将一个表变量设置为nil
时,它实际上是“未声明”(完全从内存中删除该条目)。
当一个local
变量被声明时,如果不立即赋值,它将被赋予一个值nil
。与表变量不同的是,当你将一个local
变量设置为nil
时,它并不会“未声明”(它只是拥有了一个nil
值)。
在Lua中,空字符串(""
)仍然是一个“值”,只是它是一个字符长度为零的字符串。
nil
时,它实际上是'未声明'的”有点不准确——nil
除了在表内部以外都是一个真值,所以例如,一个具有值nil
的局部变量仍然会遮蔽周围作用域中的变量... - snogglethorpe我最近也遇到了这个问题。如果数据库值是“空白”(不是null),LuaSQL会返回空字符串。虽然方法有些hacky,但以下是我的解决方案:
if (string.len(x) >= 1) then
...
end
例如:
local x
x=""
现在x不是nil了。 另一个例子:
x=0
x不是nil。
尝试运行此代码,它应该让您清楚地了解情况。
local x
if x==nil then print("x is nil") end
x=0
if x==nil then print( "This line won't be written") end
x=""
if x==nil then print( "and this line won't be written") end
第一个if语句将会被判定为真,因此打印语句将会被调用。第二个和第三个if语句都是假的,因此打印语句不会被执行。
总之,使用“==nil”来检查变量是否为空(更准确地说是“nil”)。
你的字符串可能包含空格、换行符或其他不可见字符。所以你认为它是“空的”,但实际上并不是。这通常发生在你从用户那里获取输入时,必须键入“回车”才能完成——“回车”最终会出现在字符串中。
你需要的是一个函数,告诉你字符串是否“空白”——即为空,或者是一系列空格/制表符/换行符。以下是一种方法:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
使用方法:
if isBlank(x) then
-- ...
end
not not string.find(x,"^%s*$")
- daurnimatortrue
或false
的函数。此外,string.find
返回多个值,这可能会在你刚学习该语言时产生一些副作用和意外情况。而“not not”则可以解决所有这些问题。 - kikito
""
字符串的变量并不是“空”的。它有一个字符串,即""
。这是一个有效的字符串,因此不是“无”。 - Nicol Bolas""
。 - Villagex = ""; if x == "" then print("empty"); else print("not empty"); end
是有效的 Lua 代码。它将始终打印“empty”。你的问题是当你没有x = ""
部分时它就无法工作吗?或者换句话说,仅仅因为 你 认为""
表示空并不意味着 Lua 也这样认为。 - Nicol Bolas""
?您是否从输入中读取该值?这是库返回的值吗?这将澄清您所说的“空”(一个非常主观的术语),从而使我们能够更有效地帮助您。 - Deco\macro{}
。 - Village