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
替换为_
?
答案 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