Lua中有一个缩短的"if then"语法吗?

Gre*_*reg 4 lua coronasdk

是否有一个简短的"if/then"语法可用于Lua(我专门使用Corona SDK),就像在其他一些语言中一样...特别是沿着这样的方向:

 res = (a == b) ? "It worked" : "It did NOT work"
Run Code Online (Sandbox Code Playgroud)

sha*_*unc 8

常见的习惯用法是使用和/或构造,因为布尔表达式在Lua中是短路的.

res  = a == b and "It worked" or "It did NOT work"
Run Code Online (Sandbox Code Playgroud)

虽然我个人更喜欢if/then/else几乎在所有情况下.

  • 但请注意这个限制:`a == b和nil或42`将始终评估为'42`,即使`a == b`为真.当你可以依赖"iftrue"臂既不是"nil"也不是"false"时,你只能使用这种技术. (3认同)

Dan*_* D. 7

是的,有一些用例.见http://lua-users.org/wiki/TernaryOperator

经常使用且强烈推荐的解决方案是以与三元运算符非常接近的方式组合和和或二元运算符:

x = a and b or c
x = a and b or c and d or e
Run Code Online (Sandbox Code Playgroud)

但是,这仅在if语句的主体是表达式时有效.例如,以下内容无效:

x == 3 and break else continue
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是正确的答案,但SO的习惯仍然是总结链接的内容,以防止未来链接腐烂. (3认同)