为什么会这样?
def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p(_)) }
这不是吗?
def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p()) }
forall
是函数,p
是谓词。
答案 0 :(得分:5)
对谓词的调用期望传递一个参数,所以你不能在没有传递任何东西的情况下调用它(这是p()
正在做的事情)。
下划线是Scala对“当前值”的简称,其中该值是要传递给p的Int。如果我们要明确地将Int标记为i
,那么这会消除:
{ forall(s, (i: Int) => !p(i)) }