以下两个语句有什么区别

时间:2019-11-09 22:42:25

标签: scala

def rankLangs(langs: List[String], rdd: RDD[WikipediaArticle]): List[(String, Int)] = langs.map(lang => (lang, occurrencesOfLang(lang ,rdd))).sortBy(-_._2)
def rankLangs(langs: List[String], rdd: RDD[WikipediaArticle]): List[(String, Int)] = langs.map(_ => (_, occurrencesOfLang(_, rdd))).sortBy(-_._2).reverse

IDE表示第一个错误无误,但第二个错误被标记为错误。 为什么我不能将lang替换为_

1 个答案:

答案 0 :(得分:3)

这是因为在第二个步骤中,您将在传递的匿名函数的定义中使用“ _”。

因此

langs.map(_ => (_ , occurrencesOfLang(_,rdd)))

将扩展为类似

langs.map(x$1 => (x$2:Any) => (x$2, occurrencesOfLang(x$2,rdd))

因此将返回 List [String =>(Any)=>(String,Int)] ,而不是 List [(String,Int)]

这是因为它等同于写作

langs.map(x => (_:Any) => (_, occurrencesOfLang(_,rdd))

如此处所述:What are the rules to govern underscore to define anonymous function?

可以在以下位置找到更清晰的解释和合适的示例:scala passing function with underscore produces a function not a value

相关问题