为什么 Lua 解释器会输出 nil?

Lua 5.3.0 中,我运行了 " true and print("Hi")":

> true and print("Hi")
Hi
nil

为什么程序输出 nil

点赞
用户204011
用户204011

这是 Lua 解释器在 5.3 版本中的新功能的副作用。

在以前的版本中,这段代码是无效的:

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。这就是为什么你会得到这个结果。

2015-06-28 10:26:01
用户1881196
用户1881196

print 函数返回 nil

> print("Hi") == nil
Hi
true

表达式 true and nil 返回 nil(参见 Lua 的逻辑运算符):

> true and nil
nil

这就是为什么你原始的表达式返回 nil

2015-06-28 10:36:33