为什么 Lua 中的 == 可能会按这种方式运行?

当我们在 Lua 解释器中键入以下内容时:

>print(1=="1")
 false

好的,很好!

>print(false==true)
 false

好的,很好!

>print(string==math)
 false

好的,但是为什么?

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

我不理解 == 和 ~= 的工作原理。请解释一下

点赞
用户2858170
用户2858170
print(function==nil)

会给你一个错误信息:

stdin:1: '(' expected near '=='

因为 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 等文档以及其他相关内容 :)

字符串和数学都是 Lua 标准库。 字符串和数学是两个不同的 Lua 表。 因此,它们不能相同,因此表达式字符串==math为假。

https://www.lua.org/manual/5.3/manual.html#3.4 中可以看到:

Lua 的基本表达式如下:

exp ::= prefixexp

exp ::= nil | false | true

exp ::= Numeral

exp ::= LiteralString

exp ::= functiondef

exp ::= tableconstructor

exp ::= ‘...’

exp ::= exp binop exp

exp ::= unop exp

prefixexp ::= var | functioncall | ‘(’ exp ‘)’

如您所见,仅 Lua 关键字 nil、false 和 true 是它们本身的表达式。其他关键字不是。

数学和字符串根本不是 Lua 关键字。它们是表类型的变量。变量也是表达式。这就是为什么 math == string 不会出现错误的原因。

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

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

我不是说在开始之前你应该了解里面的所有内容。但是,了解基础知识将极大地加速你的学习体验和理解!

2017-05-30 13:58:21
用户9558467
用户9558467

不使用关键字function,你可以这样做:

   test = function()
      print('test')
  end
  print(test() == nil) -- 输出 true
2018-03-29 05:47:41