scala - 应该避免 x._1,x._2... 语法吗?

标签 scala tuples

我刚开始接触 Scala。我发现自己经常使用元组变量。

例如,这是我写的一些代码:

/* Count each letter of a string and return in a list sorted by character
 * countLetter("test") = List(('e',1),('s',1),('t',2))
*/
def countLetters(s: String): List[(Char, Int)] = {
  val charsListMap = s.toList.groupBy((c:Char) => c)
  charsListMap.map(x => (x._1, x._2.length)).toList.sortBy(_._1)
}

这个元组语法(x._1、x._2 等)是否被 Scala 开发人员所反对?

最佳答案

Scala 开发人员是否不喜欢元组访问器?

简短的回答:没有。

稍长(一个字符)回答:是的。

太多 _n 's 可能是一种代码异味,在我看来,在您的情况下,以下内容要清楚得多:

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)

第二个版本中额外的 case 类定义为一行代码增加了很多可读性。

关于scala - 应该避免 x._1,x._2... 语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13790823/

相关文章:

http - 在 Lift 中接收 HTTP 请求参数

Scala 类型类,用于获取类型成员的最具体类型

scala - 如何删除具有过多 NULL 值的行?

c# - 如何拆箱元组?

arrays - 获取数组中元组的值?

python - 元组是另一个元组的子集 - Apriori 算法

scala - 关于复制案例类的表现

Scala:为什么我的函数不能打印字符串参数?

arrays - 如何在 Swift 中对元组数组中的相似元组进行平均

list - 判断给定元素是否在 double 列表中