Scala 中可以不用在語句的結(jié)束位置顯示地使用分號(;)劝术,編譯器可以進行合理的推斷挠羔。
編譯器分號推斷的規(guī)則
在編譯時宪塔,一般情況下,一行的結(jié)束會被編譯器推斷成分號狐援,除非遇到如下情況:
1.該行以一個不合法的詞(word)結(jié)束钢坦,例如:句點(.)或者中綴操作符(+)
2.下一行起始詞(begins word)不能開始一行語句
3.行結(jié)束語句在圓括號(parentheses)或者中括號(brackets)之內(nèi),因為這些括號不能包含多行語句(也就是說被編譯器視為一行語句)
針對第三條規(guī)則:在for表達式當(dāng)中啥酱,如果使用圓括號爹凹,那么有
nested loop
的情況下必須使用分號(因為編譯器不會對圓括號進行分號推斷),如果使用花括號(curly)镶殷,編譯器可以進行自動推斷
def grep(pattern: String)=
for {
file <- filesHere
if file.getName.endsWith(".scala")
line <- fileLines(file)
trimmed = line.trim
if trimmed.matches(pattern)
} println(s"$file : ${trimmed}")
for (
file <- filesHere
if file.getName.endsWith(".scala"); // 此處分號不可省略
line <- fileLines(file)
if line.trim.matches(pattern)
) println(s"$file : ${line.trim}")