当我们输入时,在Lua解释器中:
>print(1=="1")
false
好的!
>print(false==true)
false
好的!
>print(string==math)
false
好的但是为什么?
>print(function==nil)
stdin:1: '(' expected near '=='
我不理解==和〜=的工作原理。请解释
答案 0 :(得分:6)
print(function==nil)
给您错误信息:
stdin:1:'('预计在' =='
因为function
是用于定义函数变量的关键字。该关键字应该在某种语法中使用。 function
本身不是有效的Lua表达式,因此不能用作一个表达式。 Lua告诉你,你写了一些东西
它无法解释,并且通常会期望function
跟随(
。
请阅读https://www.lua.org/manual/5.3/manual.html#3.4.11 和https://www.lua.org/manual/5.3/manual.html#3.4和https://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编程,可以得到最好的答案。
我不能说你应该知道你开始的所有事情。但了解基础知识将加速您的学习经历和您的理解!
答案 1 :(得分:0)
如果不编写关键字功能,请执行此操作
function test()
print('test')
end
print(test() == nil) -- prints true