- Scala编程(第4版)
- (德)马丁·奥德斯基 (美)莱斯·彭 比尔·文纳斯
- 459字
- 2021-06-10 14:34:03
4.2 分号推断
在Scala程序中,每条语句最后的分号通常是可选的。你想要的话可以键入一个,但如果当前行只有这条语句,分号并不是必需的。另一方面,如果想在同一行包含多条语句,那么分号就有必要了:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-2.jpg?sign=1739045999-hGVjLxLLqsRHMexyhVcLwo4p8j1ea8BO-0-d6023d4bbbd00e7a98f48197b54be594)
如果想要一条跨多行的语句,大多数情况下直接换行即可,Scala会帮助你在正确的地方断句。例如,如下代码会被当作一条四行的语句处理:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-3.jpg?sign=1739045999-q5fVhQQC7Ujm41YEvtPSMX9W3J0lZ3wM-0-0aa7b14911ee0f350b6994751e7acbc2)
不过偶尔Scala也会背离你的意图,在不该断句的地方断句:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-94-4.jpg?sign=1739045999-VpWLE2RcuWTX5Zlgi43tQuhUg42ZF591-0-bc065137164b2bb453cc9e51275d7c27)
这段代码会被解析成两条语句x和+y。如果希望编译器解析成单条语句x + y,可以把语句包在圆括号里:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-95-1.jpg?sign=1739045999-1VLZnikYUhnjocSRoiKOLEYukpGgtjPP-0-925a7400c1db137fbe10cf27e6dfbf05)
或者也可以将+放在行尾。正是由于这个原因,当用中缀(infix)操作符比如+来串接表达式时,一个常见的Scala风格是将操作符放在行尾而不是行首:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-95-2.jpg?sign=1739045999-0JEglMwTk5Sex1z1lUw9v4ATHIGQkIDt-0-842ec9e63154c255adcfe34a4d9242d2)
分号推断的规则
相比分号推断的效果,(自动)分隔语句的精确规则简单得出人意料。概括地说,除非以下任何一条为true,代码行的末尾才会被当作分号处理:
1. 当前行以一个不能作为语句结尾的词结尾,比如英文句点或中缀操作符。
2. 下一行以一个不能作为语句开头的词开头。
3. 当前行的行尾出现在圆括号(...)或方括号[...]内,因为再怎么说圆括号和方括号也不能(直接)包含多条语句。