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
是谓语。
为什么这个工程?在斯卡拉使用下划线
def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p(_)) }
而这不?
def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p()) }
凡forall
是一个函数,而p
是谓语。
对谓词的调用需要传递一个参数,所以如果不传递任何东西(这就是p()
正在做什么)就不能调用它。
下划线是“当前值”的一种Scala short-hand,其中该值是要传递给p的Int。如果我们明确地将Int标记为i
,则该脱糖为:
{ forall(s, (i: Int) => !p(i)) }
p取参数。在一种情况下,你传递一个参数,而在另一种情况下你不传递一个参数。 – stonemetal