加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:48:33 所属栏目:安全 来源:网络整理
导读:我刚刚开始在Scala。我发现自己使用元组变量很多。例如,这里有一些代码我写道: /* Count each letter of a string and return in a list sorted by character * countLetter("test") = List(('e',1),('s',('t',2))*/def countLetters(s: String): List[(Ch
我刚刚开始在Scala。我发现自己使用元组变量很多。例如,这里有一些代码我写道:

/* Count each letter of a string and return in a list sorted by character
 * countLetter("test") = List(('e',1),('s',('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)
}

这个元组sytax(x._1,x._2等)被Scala开发人员皱着眉头吗?

解决方法

Scala开发人员皱着眉头的元组访问器?

简答:不。

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

太多_n可以是代码气味,在你的情况下,以下是更清楚,在我看来:

def countLetters(s: String): List[(Char,Int)] =
  s.groupBy(identity).mapValues(_.length).toList.sortBy(_._1)

有很多方法,如mapValues,专门设计来减少嘈杂的元组访问器的需要,所以如果你发现自己写的_1等,很多,这可能意味着你缺少一些不错的库方法。但偶尔他们是最干净的方式来写东西(例如,最后的_1在我的重写)。

另一个要注意的是,过度使用元组访问器应该被视为推动你的元组到case类。考虑以下:

val name = ("Travis","Brown")

println("Hello," + name._1)

相对于:

case class Name(first: String,last: String)

val name = Name("Travis"," + name.first)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读