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类定义为单行代码购买了很多可读性。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |