Я все еще изучаю Scala, но я верю, что происходит то, что вы определили частичную функцию, принимающую один аргумент. При вызове таких методов, как List.map или List.foreach, для которых требуется только один аргумент, вы можете опустить подчеркивание или имя val.
Пример исключения имени val в закрытии:
val v = List("HEY!", "BYE!")
v.foreach { Console.println } // Pass partial function, automatically
Это то же самое, что и
val v = List("HEY!", "BYE!")
v.foreach { Console.println _ } // Pass partial function, explicitly
Использование анонимного значения:
val v = List("HEY!", "BYE!")
v.foreach { Console.println(_) } // Refer to anonymous param, explicitly
Или используя именованный val:
val v = List("HEY!", "BYE!")
v.foreach { x => Console.println(x) } // Refer to val, explicitly
В вашем замыкании вы используете частичную функцию (оператор case), которая принимает анонимную переменную и немедленно превращает ее в кортеж, связанный с двумя отдельными переменными.
Полагаю, я обманываю один из фрагментов выше. Когда я доберусь до своего рабочего компьютера, я проверю в REPL.
Кроме того, взгляните на Функция Curry в Scala для получения дополнительной информации.