【问题标题】:Why is == in Lua behaving like this?为什么 == 在 Lua 中的行为是这样的?
【发布时间】:2025-12-15 17:55:02
【问题描述】:

当我们在 Lua 解释器中输入:

>print(1=="1") 
 false 

好吧!

>print(false==true) 
 false

好吧!

>print(string==math) 
 false

好的,但是为什么呢?

>print(function==nil) 
 stdin:1: '(' expected near '=='

我不明白 == 和 ~= 的工作原理。请解释

【问题讨论】:

  • 为什么string 应该等于math?而function 是关键字但不是变量,所以function == nil 根本没有任何意义。
  • == 检查参数是否相等。如果不知道你认为会发生什么,就很难解释你的理解哪里错了。是什么让您认为string==math 会给出除错误之外的任何结果?你期望print(function==nil) 的结果是什么?
  • @ChrisH 就是这样! string 和 math 是标准库的一部分。所以如果字符串和数学是假的,因为它们相等没有任何意义。那么 function 和 nil 也应该是 false ,但事实并非如此。它会引发错误!。
  • 好的,我想我现在明白你在问什么了。我会在几分钟后发布答案。
  • @GouravDas 来自 Piglet 的回答已经说明了我会拥有的一切,所以我不会再写我的了,因为它基本上是一样的。

标签: printing lua


【解决方案1】:
print(function==nil) 

给你错误信息:

stdin:1: '(' 预计在 '==' 附近

因为function 是用于定义函数变量的关键字。该关键字预计将以某种语法使用。 function 本身不是一个有效的 Lua 表达式,因此不能作为一个表达式使用。 Lua 告诉你你写了一些东西 它无法解释,并且通常会期望 function 后跟 (

请阅读https://www.lua.org/manual/5.3/manual.html#3.4.11https://www.lua.org/manual/5.3/manual.html#3.4https://www.lua.org/manual/5.3/manual.html#3.4.5

还有其他的:)

string 和 math 都是 Lua 标准库。 string 和 math 是两个不同的 Lua 表。因此它们不能相同,因此表达式 string == math 为 false。

来自https://www.lua.org/manual/5.3/manual.html#3.4

Lua 中的基本表达式如下:

exp ::= 前缀exp

exp ::= nil |假 |真的

exp ::= 数字

exp ::= LiteralString

exp ::= 函数定义

exp ::= tableconstructor

exp ::= ‘...’

exp ::= exp binop exp

exp ::= unop exp

前缀表达式 ::= var |函数调用 | ‘(’exp‘)’

如您所见,只有 Lua 关键字 nil、false 和 true 是它们自己的表达式。其他关键字没有。

math 和 string 根本不是 Lua 关键字。它们是表类型的变量。变量也是表达式。这就是为什么您不会收到math == string 的错误

此类问题最好通过阅读 Lua 的参考手册和《Lua 编程》来回答。

https://www.lua.org/docs.html

我并不是说您应该在开始之前了解其中的所有内容。但是了解最基本的知识将大大加快您的学习体验和理解!

【讨论】:

    【解决方案2】:

    不写关键字函数,就这样吧

       function test()
          print('test')
      end
      print(test() == nil) -- prints true
    

    【讨论】:

      最近更新 更多