在Lua中检查某物是否为空的条件的正确方法是什么?if x == ""
并且f x ~= ""
似乎不起作用。
4 回答
Lua 是一种动态的基于类型的语言。
任何变量都可以包含以下类型之一:nil、boolean、number、string、table、function、thread或userdata。
表中任何没有值的变量(包括_G
全局变量所在的表)都会给出nil
索引时的值。当您将表变量设置为 时nil
,它实质上是“取消声明”它(完全从内存中删除该条目)。
当一个local
变量被声明时,如果它没有被立即赋值,它被赋予一个值nil
. 与表变量不同,当您将local
变量设置为 时nil
,它不会“取消声明”它(它只有一个值nil
)。
在 Lua 中,一个空字符串 ( ""
) 仍然是一个“值”——它只是一个大小为零的字符串。
我最近也遇到了这个问题。如果数据库值为“空白”(非空),LuaSQL 将返回空字符串。一种hacky方法,但这是我解决它的方法:
if (string.len(x) >= 1) then
...
end
您的字符串中可能有空格、换行符或其他不可见字符。所以你认为它是“空的”,但事实并非如此。这通常发生在您从用户那里获取输入并且必须键入“enter”才能完成时 - “enter”最终出现在字符串中。
您需要的是一个函数,它告诉您字符串是否为“空白” - 为空,或空格/制表符/换行符列表。这是一种方法:
function isBlank(x)
return not not tostring(x):find("^%s*$")
end
用法:
if isBlank(x) then
-- ...
end
我将假设 OP 的意思是“您如何判断变量何时未分配”。
例子:
local x
变量 x 为“空”,它被初始化为“nil”。(不是文本“nil”,而是一个枚举值,表示该变量未赋值。在 Lua 中定义为 nil,在其他一些语言中定义为 NULL。)
现在分配 xa 值。例子:
x=""
现在 x 不是零。另一个例子:
x=0
x 不为零。
尝试运行此代码,它应该使您清楚地了解情况。
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语句将评估为 true 并调用 print 语句。第 2 和第 3 个if语句为假,打印语句将不会被执行。
总之,使用“==nil”来检查变量是否为“空”(更恰当地说是“nil”)。