在Lua 5.3.0,我运行" true and print("Hi")":
> true and print("Hi")
Hi
nil
Run Code Online (Sandbox Code Playgroud)
为什么程序输出nil?
该print函数返回nil:
> print("Hi") == nil
Hi
true
Run Code Online (Sandbox Code Playgroud)
表达式true and nil返回nil(参见Lua中的逻辑运算符):
> true and nil
nil
Run Code Online (Sandbox Code Playgroud)
这就是你的原始表达式返回的原因nil.
这是版本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'
Run Code Online (Sandbox Code Playgroud)
同理:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 1+1
stdin:1: unexpected symbol near '1'
Run Code Online (Sandbox Code Playgroud)
解释器只接受语句而不是表达.您可以使用return或使用快捷方式为表达式添加前缀=:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> =1+1
2
> =true and print("Hi")
Hi
nil
Run Code Online (Sandbox Code Playgroud)
在Lua 5.3中,引入了一个新功能,使得像计算器一样使用解释器更简单:如果输入无效,则解释器会尝试使用前缀return.这就是你得到这个结果的原因.