在Scala中使用Underscore

use*_*318 1 functional-programming scala

为什么会这样?

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p(_)) }
Run Code Online (Sandbox Code Playgroud)

这不是吗?

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p()) }
Run Code Online (Sandbox Code Playgroud)

forall函数在哪里,p是谓词.

Sha*_*nds 5

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

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

{ forall(s, (i: Int) => !p(i)) }
Run Code Online (Sandbox Code Playgroud)