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

什么是在 Lua 中检查某些内容是否为空的适当方式?if x == ""if x ~= ""似乎都不起作用。

原文链接 https://stackoverflow.com/questions/10328211

点赞
stackoverflow用户837856
stackoverflow用户837856

Lua 是一个动态类型语言

任何变量可以存储以下类型之一:nil_、_boolean_、_number_、_string_、_table_、_function_、_thread 或 _userdata_。

在没有值的情况下,在表中的任何变量(包括全局变量所在的 _G 表)索引时会返回 nil 值。当您将表变量设置为 nil 时,它实际上是“未声明”(将条目从内存中完全移除)。

当声明一个 local 变量时,如果它没有立即被赋值,则会赋予 nil 值。与表变量不同的是,当您将 local 变量设置为 nil 时,它并不会“未声明”(它只是有一个值为 nil)。

在 Lua 中,空字符串( "")仍然是一种“值”——它只是一个大小为零的字符串。

2012-04-26 07:23:19
stackoverflow用户312586
stackoverflow用户312586

你的字符串可能包含空格、换行符或其他不可见字符。所以你认为它是“空的”,但实际上并不是。通常在你从用户那里输入内容时,当他按下“Enter”键时,“Enter”就会出现在字符串中。

你需要的是一个函数,告诉你字符串是否是“空白”的 - 要么是空的,要么是由空格/制表符/换行符组成的列表。以下是一种方法:

function isBlank(x)
  return not not tostring(x):find("^%s*$")
end

用法:

if isBlank(x) then
  -- ...
end
2012-04-26 09:40:20
stackoverflow用户1765690
stackoverflow用户1765690

我最近也遇到了这个问题。如果数据库的值为“空白”(非空),LuaSQL将返回空字符串。虽然这是一个笨拙的方法,但以下是我解决它的方式:

if (string.len(x) >= 1) then
    ...
end
2013-12-10 02:55:14
stackoverflow用户5386097
stackoverflow用户5386097

我想做一个假设,即问问者的意思是“如何判断一个变量是否未赋值”。

示例:

local x

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

现在分配一个值给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_语句将计算为true,并且将调用print语句。第二个和第三个_if_语句是false,不会执行print语句。

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

2021-12-22 00:45:10