Give a method a function that decides the order.

function-parameter A higher-order method takes a function as an argument. `sortWith` accepts a function that compares two elements and uses it to order the list.

Passing a Function

first
FunctionParameter.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val first = 3
    val nums = List(first, 1, 2)
    val sorted = nums.sortWith((a, b) => a < b)
    val text = sorted.mkString(",")

    println("first=" + first)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val first = 0
    val nums = List(first, 1, 2)
    val sorted = nums.sortWith((a, b) => a < b)
    val text = sorted.mkString(",")

    println("first=" + first)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val first = 5
    val nums = List(first, 1, 2)
    val sorted = nums.sortWith((a, b) => a < b)
    val text = sorted.mkString(",")

    println("first=" + first)
    println("text=" + text)
  }
}
  1. first ← 3, nums ← List(3, 1, 2), sorted ← List(1, 2, 3), text ← 1,2,3

    1object Main {2  def main(args: Array[String]): Unit = {3    val first→ 3 = 3 //@first=5, 04    val nums→ List(3, 1, 2) = List(first3, 1, 2)5    val sorted→ List(1, 2, 3) = numsList(3, 1, 2).sortWith((a, b) => a < b)6    val text→ 1,2,3 = sortedList(1, 2, 3).mkString(",")78    println("first=" + first3)9    println("text=" + text1,2,3)10  }11}
    outputfirst=3
    text=1,2,3
  1. first ← 0, nums ← List(0, 1, 2), sorted ← List(0, 1, 2), text ← 0,1,2

    1object Main {2  def main(args: Array[String]): Unit = {3    val first→ 0 = 04    val nums→ List(0, 1, 2) = List(first0, 1, 2)5    val sorted→ List(0, 1, 2) = numsList(0, 1, 2).sortWith((a, b) => a < b)6    val text→ 0,1,2 = sortedList(0, 1, 2).mkString(",")78    println("first=" + first0)9    println("text=" + text0,1,2)10  }11}
    outputfirst=0
    text=0,1,2
  1. first ← 5, nums ← List(5, 1, 2), sorted ← List(1, 2, 5), text ← 1,2,5

    1object Main {2  def main(args: Array[String]): Unit = {3    val first→ 5 = 54    val nums→ List(5, 1, 2) = List(first5, 1, 2)5    val sorted→ List(1, 2, 5) = numsList(5, 1, 2).sortWith((a, b) => a < b)6    val text→ 1,2,5 = sortedList(1, 2, 5).mkString(",")78    println("first=" + first5)9    println("text=" + text1,2,5)10  }11}
    outputfirst=5
    text=1,2,5