为什么Lua中的==表现得像这样?

时间:2017-05-30 13:29:37

标签: printing lua

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

>print(1=="1") 
 false 

好的!

>print(false==true) 
 false

好的!

>print(string==math) 
 false

好的但是为什么?

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

我不理解==和〜=的工作原理。请解释

2 个答案:

答案 0 :(得分:6)

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

等等:)

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

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

  

Lua中的基本表达式如下:

     

exp :: = prefixexp

     

exp :: = nil |假|真

     

exp :: = Numeral

     

exp :: = LiteralString

     

exp :: = functiondef

     

exp :: = tableconstructor

     

exp :: ='...'

     

exp :: = exp binop exp

     

exp :: = unop exp

     

prefixexp :: = var | functioncall | '('exp')'

如您所见,只有Lua关键字为nil,false和true都是表达式。其他关键字不是。

math和string根本就没有Lua关键字。它们是类型表的变量。变量也是表达式。这就是为什么你没有收到math == string

的错误的原因

通过阅读Lua的参考手册和Lua编程,可以得到最好的答案。

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

我不能说你应该知道你开始的所有事情。但了解基础知识将加速您的学习经历和您的理解!

答案 1 :(得分:0)

如果不编写关键字功能,请执行此操作

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