小编Ste*_*ngs的帖子

使用(显式)隐式参数调用方法时"散文"和"点符号"的差异

我不是Scala专家,我对使用隐式参数调用方法的语法感到困惑.

这是我的情况:

我有这样的Spark RDD:

val myData: RDD[Array[String]] = ...
Run Code Online (Sandbox Code Playgroud)

并为其定义了订购:

object MyOrdering extends Ordering[Array[String]] = ...
Run Code Online (Sandbox Code Playgroud)

我想过滤这个RDD并根据我的订购获取RDD中的前n个条目.Spark RDD有一种方法可以使用此签名获取前n个条目:

def top(num: Int)(implicit ord: Ordering[T]): Array[T] 
Run Code Online (Sandbox Code Playgroud)

最初我尝试了这段代码

myData filter { D =>
  D(9) == "yes"
} top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)

哪个失败了这个错误:

error: Int(50) does not take parameters
    } top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)

但是,此代码有效:

myData.filter(D => D(9) == "yes").top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)

对于我的初学者来说,失败的代码示例和工作代码示例看起来是指定等效逻辑.我错了吗?我实际上在两个代码示例中做了哪些不同的事情?或者这是Scala编译器如何解析代码的问题?

syntax scala parameter-passing

5
推荐指数
1
解决办法
154
查看次数

标签 统计

parameter-passing ×1

scala ×1

syntax ×1