美文网首页
Scala的分号推断

Scala的分号推断

作者: Grits | 来源:发表于2018-02-28 17:04 被阅读0次

    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的分号推断

          本文链接:https://www.haomeiwen.com/subject/oarixftx.html