2017-05-30 66 views
-6

在Lua解释,当我们键入:为什么在Lua中==会表现得像这样?

>print(1=="1") 
false 

那么好吧!

>print(false==true) 
false 

好吧!

>print(string==math) 
false 

好,但为什么呢?

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

我不明白==和〜=的工作。请解释

+1

为什么'string'应该等于'math'? 'function'是关键字,但不是可变的,所以'function == nil'根本就没有出现。 – moteus

+0

'=='检查参数是否相等。不知道你的想法会发生什么,很难解释你的理解错误。是什么让你认为'string == math'会给出除false之外的结果?你期望什么是'print(function == nil)'的结果? –

+0

@ChrisH就是这样!字符串和数学是标准库的一部分。所以如果字符串和数学是错误的,因为它们没有任何意义是相等的。然后函数和零也应该是假的,但事实并非如此。它抛出一个错误,而不是! –

回答

6
print(function==nil) 

给你的错误信息:

标准输入: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表。因此它们不能相同,因此表达式字符串==数学是错误的。

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

Lua中基本表达式如下:

EXP :: = prefixexp

EXP :: =零| false |真正

EXP :: =数字

EXP :: = LiteralString

EXP :: = functiondef

EXP :: = tableconstructor

EXP :: = '...'

exp :: = exp binop exp

exp :: = unop exp

prefixexp :: = var | functioncall | “(” EXP“)”

正如你看到的只是Lua的关键字为零,对自己的虚假和真实的表达。其他关键字不是。

数学和字符串没有Lua的关键字在所有。他们是类型表的变量。变量也是表达式。这就是为什么你没有得到一个错误math == string

问题,如通过阅读Lua的参考手册和编程在Lua最好回答。

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

我不说,你应该知道的一切,就在那里之前打个电话开始。但了解基础知识将会加速您的学习体验和理解!

相关问题