Percebo que muitos desenvolvedores de scala não percebem que você pode usar unapply em qualquer parte do seu código.
Pegue alguma função que retorna uma tupla
scala> def foo = (1, 2)
foo: (Int, Int)
Você pode extrair os valores com o operador unapply das tuplas
scala> val (l, r) = foo
l: Int = 1
r: Int = 2
Aqui está outro exemplo com classes de caso
scala> case class Bar(l: Int, r: Int)
defined class Bar
scala> val bar = Bar(4, 5)
bar: Bar = Bar(4,5)
scala> var Bar(leftValue, rightValue) = bar
leftValue: Int = 4
rightValue: Int = 5