在 Scastie 网站上,以下代码在带有 Scala 2.11.12 的 Spark Shell 中直接工作,没有问题。但是在运行 Apache Toree 的 Jupyter Notebook 中,出现了一个奇怪的错误。
// polymorphic functions
def findFirst[A](as: List[A], p: A => Boolean): Int = {
val listLength = as.length
@annotation.tailrec
def go(n: Int): Int = {
if (n >= listLength) -1
else if (p(as(n))) n
else go(n + 1)
}
go(0)
}
def passFun(x: Int): Boolean = x == 2
val l: List[Int] = List(1, 2, 3)
// println("The findFirst of function is: ")
println(s"Answer is: ${findFirst(l, passFun)}")
在内核刚启动后首次执行此代码时没有错误。但是当执行相同的单元格时,立即显示以下错误:
答案是:1 a = 1 :28:错误:缺少方法 findFirst 的参数列表 未应用的方法仅在需要函数类型时才转换为函数。您可以通过编写
findFirst _
或findFirst(_,_)
代替findFirst
. findFirst ^ lastException: Throwable = null findFirst: [A](as: List[A], p: A => Boolean)Int 1
重新启动内核时错误消失了。有人可以告诉我他们是否知道此问题的解决方案或原因吗?