Scala的分号推断

Scala 中可以不用在语句的结束位置显示地使用分号(;),编译器可以进行合理的推断。

编译器分号推断的规则

在编译时,一般情况下,一行的结束会被编译器推断成分号,除非遇到如下情况:

1.该行以一个不合法的词(word)结束,例如:句点(.)或者中缀操作符(+)
2.下一行起始词(begins word)不能开始一行语句
3.行结束语句在圆括号(parentheses)或者中括号(brackets)之内,因为这些括号不能包含多行语句(也就是说被编译器视为一行语句)

针对第三条规则:在for表达式当中,如果使用圆括号,那么有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}")

你可能感兴趣的:(Scala的分号推断)