18

在Lua中检查某物是否为空的条件的正确方法是什么?if x == ""并且f x ~= ""似乎不起作用。

4

4 回答 4

17

Lua 是一种动态的基于类型的语言
任何变量都可以包含以下类型之一:nilbooleannumberstringtablefunctionthreaduserdata
表中任何没有值的变量(包括_G全局变量所在的表)都会给出nil索引时的值。当您将表变量设置为 时nil,它实质上是“取消声明”它(完全从内存中删除该条目)。
当一个local变量被声明时,如果它没有被立即赋值,它被赋予一个值nil. 与表变量不同,当您将local变量设置为 时nil,它不会取消声明”它(它只有一个值nil)。

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

于 2012-04-26T07:23:19.977 回答
4

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

if (string.len(x) >= 1) then
    ...
end
于 2013-12-10T02:55:14.007 回答
1

您的字符串中可能有空格、换行符或其他不可见字符。所以你认为它是“空的”,但事实并非如此。这通常发生在您从用户那里获取输入并且必须键入“enter”才能完成时 - “enter”最终出现在字符串中。

您需要的是一个函数,它告诉您字符串是否为“空白” - 为空,或空格/制表符/换行符列表。这是一种方法:

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

用法:

if isBlank(x) then
  -- ...
end
于 2012-04-26T09:40:20.520 回答
1

我将假设 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”)。

于 2021-12-22T00:45:10.187 回答