在Lua 5.3.0
中,我运行“true and print("Hi")
”:
> true and print("Hi")
Hi
nil
为什么程序输出nil
?
答案 0 :(得分:7)
print
函数返回nil
:
> print("Hi") == nil
Hi
true
表达式true and nil
返回nil
(请参阅Logical operators in Lua):
> true and nil
nil
这就是原始表达式返回nil
的原因。
答案 1 :(得分:6)
这是版本5.3中Lua解释器的新功能的副作用。
在以前的版本中,此代码无效:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> true and print("Hi")
stdin:1: unexpected symbol near 'true'
类似地:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 1+1
stdin:1: unexpected symbol near '1'
解释器只接受语句,而不是表达。您可以使用return
或快捷方式=
为表达式添加前缀:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> =1+1
2
> =true and print("Hi")
Hi
nil
在Lua 5.3中,引入了一个新功能,使得像计算器一样使用解释器更简单:如果输入无效,则解释器会尝试用return
作为前缀。这就是你得到这个结果的原因。