lua 函数条件与返回的区别是什么?
1.
function dum(t)
if t then return 1 end
return 0
end
2.
function dum(t)
if t then return 1 else return 0 end
end
上面两个函数在功能上是一样的,只是实现上有一些差别。
疑惑是
- 它们在语义上是否有差别?
- 它们在编译器中的实现方式是否相同?
- 在逻辑上,这两个函数是否完全一致?
希望能够能得到详解。谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有一小点点区别,我这里先说一下查看Lua(我指的是其官方实现)汇编的方法吧。
用
luac -l src.lua
就可以在stdout上打印出src.lua
生成的Lua VM字节码,并且是已经反汇编好了的。有了这个小技巧,我们就可以开始之后的讨论了。我把你的这两个函数分别改名为
dum1()
和dum2()
,顺带帮你写了个dum3()
,程序内容和Lua反汇编结果如下:从实际的运行效果来说,这3个版本的
dum()
都是一样的(如果t不是false或者nil就返回1,否则返回0),但是实际运行起来略有一小点差别:dum3()
会比前两个版本要多执行一个判断(因为Lua编译器没做什么优化,所以那个1还是要判断一下的)。dum1()
和dum2()
之间虽然后者比前者多编译出了一条JMP语句,但是由于这条JMP语句是在RETURN之后的,所以并不会影响程序实际的运行流程。总结起来就是,这3个版本的
dum()
语义没有差别,运行的结果也一样,但是编译出来的语句略有差别:其中dum1()
和dum2()
运行流程一致,dum3()
会多对常数1进行判断。