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