В Scala можно определить методы внутри других методов. Это ограничивает их объем использования внутри блока определения. Я использую их для повышения удобочитаемости кода, который использует несколько функций более высокого порядка. В отличие от анонимных литералов функции, это позволяет мне давать им значимые имена, прежде чем передавать их.
Например:
class AggregatedPerson extends HashSet[PersonRecord] {
def mostFrequentName: String = {
type NameCount = (String, Int)
def moreFirst(a: NameCount, b: NameCount) = a._2 > b._2
def countOccurrences(nameGroup: (String, List[PersonRecord])) =
(nameGroup._1, nameGroup._2.size)
iterator.toList.groupBy(_.fullName).
map(countOccurrences).iterator.toList.
sortWith(moreFirst).head._1
}
}
Есть ли какая-либо стоимость выполнения из-за определения вложенного метода, о котором я должен знать?
Отличается ли ответ на закрытие?