gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:11:59 26 4
gpt4 key购买 nike

我刚开始接触 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com