![Scala编程(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/353/38381353/b_38381353.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.2 分号推断
在Scala程序中,每条语句最后的分号通常是可选的。你想要的话可以键入一个,但如果当前行只有这条语句,分号并不是必需的。另一方面,如果想在同一行包含多条语句,那么分号就有必要了:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-2.jpg?sign=1739630921-RHgW45lwVwvzTy5XroaTDg0n2KGj27ST-0-3fe3aa491662c3f2fa59685a299c83a1)
如果想要一条跨多行的语句,大多数情况下直接换行即可,Scala会帮助你在正确的地方断句。例如,如下代码会被当作一条四行的语句处理:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-3.jpg?sign=1739630921-oJK78C03cnbZrhK2haWWeFKWmyY46VTp-0-d79069d82644cf5348e3300b4400feb1)
不过偶尔Scala也会背离你的意图,在不该断句的地方断句:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-4.jpg?sign=1739630921-YdCNMK2L5JCPHb3RG6C4qpQHzwz7KT9Q-0-9a4622efd1608a76c08393a52efe67fc)
这段代码会被解析成两条语句x和+y。如果希望编译器解析成单条语句x + y,可以把语句包在圆括号里:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-95-1.jpg?sign=1739630921-CL7wclMhUpqV10peUBSkxuFePvh9I0G1-0-a3afc137c6c39c1825a785c936b36381)
或者也可以将+放在行尾。正是由于这个原因,当用中缀(infix)操作符比如+来串接表达式时,一个常见的Scala风格是将操作符放在行尾而不是行首:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-95-2.jpg?sign=1739630921-scNeMdSwGTNjAuwknddfMkPXFfTDPcmt-0-fb28689a62ab0ff306b11b6fee03f822)
分号推断的规则
相比分号推断的效果,(自动)分隔语句的精确规则简单得出人意料。概括地说,除非以下任何一条为true,代码行的末尾才会被当作分号处理:
1. 当前行以一个不能作为语句结尾的词结尾,比如英文句点或中缀操作符。
2. 下一行以一个不能作为语句开头的词开头。
3. 当前行的行尾出现在圆括号(...)或方括号[...]内,因为再怎么说圆括号和方括号也不能(直接)包含多条语句。