Store a function in a value and call it.

function-value A function can be stored in a `val` like any other value. Calling it with an argument runs the function body and returns a result.

Function Values

step
FunctionValue.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val step = 2
    val addStep = (x: Int) => x + step
    val result = addStep(4)

    println("step=" + step)
    println("result=" + result)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val step = 1
    val addStep = (x: Int) => x + step
    val result = addStep(4)

    println("step=" + step)
    println("result=" + result)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val step = 5
    val addStep = (x: Int) => x + step
    val result = addStep(4)

    println("step=" + step)
    println("result=" + result)
  }
}
  1. step ← 2, addStep ← ⟨Main$ lambda A⟩, result ← 6

    1object Main {2  def main(args: Array[String]): Unit = {3    val step→ 2 = 2 //@step=1, 54    val addStep→ ⟨Main$ lambda A⟩ = (x: Int) => x + step5    val result→ 6 = addStep(4)667    println("step=" + step2)8    println("result=" + result6)9  }10}
    outputstep=2
    result=6
  1. step ← 1, addStep ← ⟨Main$ lambda A⟩, result ← 5

    1object Main {2  def main(args: Array[String]): Unit = {3    val step→ 1 = 14    val addStep→ ⟨Main$ lambda A⟩ = (x: Int) => x + step5    val result→ 5 = addStep(4)567    println("step=" + step1)8    println("result=" + result5)9  }10}
    outputstep=1
    result=5
  1. step ← 5, addStep ← ⟨Main$ lambda A⟩, result ← 9

    1object Main {2  def main(args: Array[String]): Unit = {3    val step→ 5 = 54    val addStep→ ⟨Main$ lambda A⟩ = (x: Int) => x + step5    val result→ 9 = addStep(4)967    println("step=" + step5)8    println("result=" + result9)9  }10}
    outputstep=5
    result=9