如何检查Lua中的值是否为空?

Vil*_*age 17 lua conditional

在Lua中对条件进行检查是否为空的正确方法是什么?if x == ""并且f x ~= ""似乎没有工作.

Dec*_*eco 18

Lua是一种基于动态类型的语言.
任何变量都可以包含以下类型之一:nil,boolean,number,string,table,function,threaduserdata.
表中的任何变量(包括_G全局所在的表)没有值都会给出nil索引时的值.当您将表变量设置nil为时,它基本上"取消声明"它(完全从内存中删除条目).
当一个local变量声明,如果不立即指派它被赋予的价值nil.不同于表变量,当你设置一个local变量nil,它不是 "undeclare"它(它只是有一个值nil).

在Lua中,空字符串("")仍然是一个"值" - 它只是一个大小为零的字符串.


小智 5

我最近也遇到了这个问题。如果数据库值为“空白”(非空),LuaSQL 将返回空字符串。这是一种 hacky 方法,但我是这样解决的:

if (string.len(x) >= 1) then
    ...
end
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 5

我将假设 OP 的意思是“如何判断变量何时未分配”。

例子:

local x
Run Code Online (Sandbox Code Playgroud)

变量x是“空”,它被初始化为“nil”。(不是文本“nil”,而是一个枚举值,表示变量未分配。在 Lua 中定义为 nil,在其他一些语言中定义为 NULL。)

现在分配 xa 值。例子:

x=""
Run Code Online (Sandbox Code Playgroud)

现在 x 不为零。另一个例子:

x=0
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

第一个if语句将计算为 true,并且将调用 print 语句。第二个和第三个if语句为 false,不会执行 print 语句。

总之,使用“==nil”来检查变量是否为“空”(更准确地说是“nil”)。