Higher-Order Functions
Function Values
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
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)
}
}
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
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
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