Comment faire la somme des champs des éléments de la collection sans les mapper en premier (comme foldLeft / reduceLeft)?

Considérer cette classe:

 case class Person(val firstName: String, val lastName: String, age: Int)
 val persons = Person("Jane", "Doe", 42) :: Person("John", "Doe", 45) :: 
               Person("Joe", "Doe", 43) :: Person("Doug", "Don", 65) :: 
               Person("Darius", "Don", 24) :: Person("Dora", "Don", 20) :: 
               Person("Dane", "Dons", 29) :: Nil

Pour obtenir la somme de l'âge de toutes les personnes, je peux écrire du code comme:

persons.foldLeft(0)(_ + _.age)

Mais si je veux utiliser sumj'ai besoin de faire correspondre la valeur de la première et le code ressemble à ceci:

persons.map(_.age).sum

Comment puis-je utiliser le sum méthode sans la création d'un niveau intermédiaire collection?

(Je sais que cette "optimisation" n'ont pas de réelle différence de performance lorsqu'il n'est pas exécuté dans une boucle serrée, et je connais aussi paresseux points de vue et ainsi de suite.)

Est-il possible d'avoir un code comme

persons.sum(_.age)

faire ce que foldLeft/reduceLeft?

source d'informationauteur soc