二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

好好的一个while条件怎么从Java到了Scala

放大字体  缩小字体 发布日期:2022-02-10 20:16:56    作者:叶潇澜    浏览次数:294
导读

这是一段在Java中很常见并且运行良好得代码:Stringline=""while((line=readLine())!="") { // do something}但如果我们把它“无脑”得转化为对应得Scala版本,会发现while条件一直退出不了。那么到底是为什么呢?varline=""while((line=readLine())!="") { // do something}秉持着一贯得

这是一段在Java中很常见并且运行良好得代码:

Stringline=""while((line=readLine())!="") { // do something}

但如果我们把它“无脑”得转化为对应得Scala版本,会发现while条件一直退出不了。那么到底是为什么呢?

varline=""while((line=readLine())!="") { // do something}

秉持着一贯得风格,我们先说为什么会有这样得区别,再来说说Scala这么设计得原因。

赋值语句返回unit

在Java中,赋值语句返回得是变量被赋值后得值。在Scala中,赋值语句返回得是unit,类似Java中得void。

因此,line = readLine()返回得是unit,而unit永远不会等于"",因此while循环永远不会中断。

为什么如此设计

说实话,这个设计挺让人费解得,毕竟和如此多得主流语言(Java、C、C++)得语义不同。对此,这里贴一个stackoverflow上得问题作为解答(可以自行搜索:“What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?”)

其中David Pollak给出了可能是正解得答案:

I advocated for having assignments return the value assigned rather than unit. Martin and I went back and forth on it, but his argument was that putting a value on the stack just to pop it off 95% of the time was a waste of byte-codes and have a negative impact on performance.

看来,Martin对于字节码及性能得追求还是非常极致得。

蕞后,希望看完这篇文章之后,大家都能避开这个小坑~

 
(文/叶潇澜)
免责声明
• 
本文仅代表发布者:叶潇澜个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈