在Scala中使用Underscore

时间:2013-10-07 02:19:41

标签: scala functional-programming

为什么会这样?

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p(_)) }

这不是吗?

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p()) }

forall是函数,p是谓词。

1 个答案:

答案 0 :(得分:5)

对谓词的调用期望传递一个参数,所以你不能在没有传递任何东西的情况下调用它(这是p()正在做的事情)。

下划线是Scala对“当前值”的简称,其中该值是要传递给p的Int。如果我们要明确地将Int标记为i,那么这会消除:

{ forall(s, (i: Int) => !p(i)) }