プログラミング雑記

プログラミングの雑記です。

関数の中に関数

  • クロージャに相当するものは、変数の実体ではなく、参照をキャプチャーしている。
  • 参照もとがライフサイクル上廃棄されることになった場合は、自動的に値等に再配置される。
import scala.io.Source

object Main extends App {
  processFile("src/Main.scala", 30)
  def processFile(filename: String, width: Int): Unit = {
    val source = Source.fromFile(filename)
    for (line <- source.getLines())
      processLine(filename, width, line)
  }
  private def processLine(filename: String, width: Int, line: String) = {
    if (line.length > width) {
      println(filename + ": " + line.trim)
    }
  }
}

object Main extends App {
  processFile("src/Main.scala", 30)
  def processFile(filename: String, width: Int): Unit = {
    def processLine(line: String) = {
      // メソッドは、変数の実体ではなく、参照をキャプチャーしている。
      if (line.length > width) {
        println(filename + ": " + line.trim)
      }
    }
    val source = Source.fromFile(filename)
    for (line <- source.getLines())
      processLine(line)
  }
}