Ответ 1
Являются ли аксессоры кортежа недоверчивыми разработчиками Scala?
Короткий ответ: нет.
Немного длиннее (одним символом) ответ: да.
Слишком много _n
может быть запахом кода, и в вашем случае следующее гораздо яснее, на мой взгляд:
def countLetters(s: String): List[(Char, Int)] =
s.groupBy(identity).mapValues(_.length).toList.sortBy(_._1)
Существует множество методов, таких как mapValues
, которые специально предназначены для сокращения необходимости в устройствах с помехоподавляющим набором, поэтому, если вы обнаружите, что пишете _1
и т.д., много, это, вероятно, означает, что вы Отсутствуют некоторые полезные методы библиотеки. Но иногда это самый чистый способ написать что-то (например, окончательный _1
в моей перезаписи).
Еще одна вещь, которую следует отметить, заключается в том, что чрезмерное использование аксессуаров кортежа следует рассматривать как подталкивание к продвижению ваших кортежей к классам классов. Рассмотрим следующее:
val name = ("Travis", "Brown")
println("Hello, " + name._1)
В отличие от:
case class Name(first: String, last: String)
val name = Name("Travis", "Brown")
println("Hello, " + name.first)
Определение класса дополнительного случая во второй версии покупает большую удобочитаемость для одной строки кода.