1. 程式人生 > 實用技巧 >《Scala程式設計》 內建的控制結構 - for表示式

《Scala程式設計》 內建的控制結構 - for表示式

說明:

①在for表示式中,“file <- files”叫做生成器(generator)

②巢狀迴圈可以寫在一個for裡

③可以為每個生成器新增if過濾器(filter)

④trimmed是一箇中途繫結的變數

⑤for表示式可以有返回值,將yeild放在程式碼體之前。

程式碼

import java.io.File

import scala.io.Source

object Test {

  def main(args: Array[String]): Unit = {
    println(grep(".+").mkString("\n\r"))
  }

  def fileLines(file: File): List[String] = {
    Source.fromFile(file).getLines().toList
  }

  def grep(pattern: String): Array[String] = {

    val files: Array[File] = new File(".").listFiles()

    for {
      file <- files
      if file.getName.contains(".")
      if file.getName.endsWith(".xml")
      line <- fileLines(file)
      trimmed = line.trim
      if trimmed.matches(pattern)
    }yield file + ": " + trimmed


  }

}

控制檯輸出

.\pom.xml: <?xml version="1.0" encoding="UTF-8"?>
.\pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0"
.\pom.xml: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
.\pom.xml: xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
.\pom.xml: <modelVersion>4.0.0</modelVersion>
.\pom.xml: <groupId>org.example</groupId>
.\pom.xml: <artifactId>scala-demo</artifactId>
.\pom.xml: <version>1.0-SNAPSHOT</version>
.\pom.xml: </project>