2013-10-07 35 views
1

为什么这个工程?在斯卡拉使用下划线

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

而这不?

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

forall是一个函数,而p是谓语。

+2

p取参数。在一种情况下,你传递一个参数,而在另一种情况下你不传递一个参数。 – stonemetal

回答

5

对谓词的调用需要传递一个参数,所以如果不传递任何东西(这就是p()正在做什么)就不能调用它。

下划线是“当前值”的一种Scala short-hand,其中该值是要传递给p的Int。如果我们明确地将Int标记为i,则该脱糖为:

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