В Scala используются объекты первого класса . Это означает, что:
язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их в качестве значений из других функций и присвоение их переменным или сохранение их в структурах данных
В этом случае конструктор может принять Function1[PartitionedFile, InputPartitionReader[T]]
. Здесь нет ничего особенно необычного, и функции в качестве аргументов вездесущи в Scala, с наиболее ярким примером collection
API.
А на самом деле это то, как здесь используется функция - map
по коллекции:
file.files.iterator.map(f => PartitionedFileReader(f, readFunction(f)))
Это использование в значительной степени объясняет мотивацию.